npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

ftech-web-sdk

v0.3.6

Published

本项目基于 qianqun 来实现智能客服,质检,辅助等页面的极易集成 APAAS 方案。 本项目提供便利的 JS SDK 接入,可以将智能客服,质检,辅助页面快速接入到业务系统中,可以避免传统 iframe 的页面引入方式的跨域,身份认证等业务开发,也可以避免代码直接引入带来的 JS、CSS 样式冲突。

Downloads

7

Readme

ftech-web-sdk

本项目基于 qianqun 来实现智能客服,质检,辅助等页面的极易集成 APAAS 方案。 本项目提供便利的 JS SDK 接入,可以将智能客服,质检,辅助页面快速接入到业务系统中,可以避免传统 iframe 的页面引入方式的跨域,身份认证等业务开发,也可以避免代码直接引入带来的 JS、CSS 样式冲突。

1、安装

npm i @tencent/ftech-web-sdk

2、APAAS页面集成介绍

当前SDK目前仅服务于腾讯云小微产品,包括智能质检、智能辅助、交互式数智人、客服机器人、语音助手等产品。 腾讯云小微产品官网

3、接入流程

设计架构 架构图

1、vue 引入

import FtechWebSDK, { MicroApp } from '@tencent/ftech-web-sdk';

// 在页面初始化,调用 initial 接口获取 相关页面信息
const pageInfos = FtechWebSDK.initial({
  app_id: 'xxx', // 需要申请的app_id
  prefetch: true, // 是否预加载
  signUrl: isProd ? 'https://uni.xiaowei.cloud.tencent.com/api/common/getTestSign' : 'https://uni.xiaowei.cloud.tencent.com/test/api/common/getTestSign', // 参考 FAQ 如何实现
});

在对应页面容器中,启动该页面的加载过程。

<template>
  <div
    :style="{ height: visible ? 'auto' : 0 }"
    class="micro-app-wrapper"
    :class="{
      hidden: !visible,
    }"
  >
    <div v-show="loading && visible" class="micro-app-loading">
      <a-spin :spinning="loading" />
    </div>
    <div
      id="micro-app-container"
      :class="{
        'has-outset': isInNoBreadcrumbContainer,
      }"
    ></div>
  </div>
</template>
<script lang="ts">
import FtechWebSDK, { MicroApp } from '@tencent/ftech-web-sdk';
import Vue from 'vue';
export default Vue.extend({
  name: 'Container',
  data() {
    return {
      loading: false,
      microInstance: {} as MicroApp,
      pages: [],
    };
  },
  props: {
  },
  computed: {
    visible() {
      // 开始控制当前组件是否显示
      console.log('computed visible', this.$router);
      return location.hash.endsWith('/qa_pairs/all/all');
    },
  },
  beforeDestroy() {
    console.log('开始执行销毁逻辑', this.microInstance);
    this.microInstance?.unmount?.();
  },
  updated() {
    console.log('开始执行更新逻辑', this.microInstance);
    this.microInstance?.update?.({ ...props });
  },
  async mounted() {
    console.log('开始执行创建逻辑');
    FtechWebSDK.subscribe((value: any) => {
      console.log('监听子应用抛出事件', value);
    });
    const info: any = await FtechWebSDK.initial({
      app_id: 'xxx', // 需要申请的app_id
      prefetch: true, // 是否预加载
      signUrl: isProd ? 'https://uni.xiaowei.cloud.tencent.com/api/common/getTestSign' : 'https://uni.xiaowei.cloud.tencent.com/test/api/common/getTestSign', // 参考 FAQ 如何实现
    });
    this.microInstance = await FtechWebSDK.load({
      pageId: info.appId,
      container: '#micro-app-container',
      props: {
        loginUrl: '', // 腾讯登录之后的重定向地址, 默认指向当前页面地址
        baseApiUrl: info.apiBaseUrl,
        useNativeRoute: 3, // 具体参考 FAQ 如何决定采用何种路由方式去加载微应用?
      },
    }, configration?);
  },
});
</script>

<style lang="less" scoped>
#micro-app-container {
  height: 100%;
  overflow: auto;

  .has-outset {
    margin: -16px -20px;
  }
}

#micro-app-container > div {
  height: 100%;
}

.micro-app-wrapper {
  &.hidden {
    display: none;
  }

  .micro-app-loading {
    height: 100%;
    width: 100%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
  }
}
</style>

2、react 引入

待补充

4、参数文档

initial(appInfo) 接口

appInfo参数列表:

{
  app_id: 'xxx', // 需要申请的app_id
  prefetch: true, // 是否预加载
  signUrl: 'remote-url', // 参考 FAQ 如何实现
}

返回值:

{
  "appId":"001",
  "appName":"问答知识库",
  "appUrl":"https://xiaowei.cloud.tencent.com/chatbot/",
  "path":"/#/products/2a_1645433697270_40/-/qa_pairs/all/all",
  "apiBaseUrl":"https://uni.xiaowei.cloud.tencent.com/chatbot/api",
  "platform":"industry"
}

load(FloadConfig) 接口

FloadConfig 参数列表

interface FLoadConfig {
  container: string;
  pageId: string;
  props?: FMicroProps; // 传入对应微应用所需要的参数
}

返回 MicroApp 实例:

  • mount(): Promise;
  • unmount(): Promise;
  • update(customProps: object): Promise;
  • getStatus(): | "NOT_LOADED" | "LOADING_SOURCE_CODE" | "NOT_BOOTSTRAPPED" | "BOOTSTRAPPING" | "NOT_MOUNTED" | "MOUNTING" | "MOUNTED" | "UPDATING" | "UNMOUNTING" | "UNLOADING" | "SKIP_BECAUSE_BROKEN" | "LOAD_ERROR";
  • loadPromise: Promise;
  • bootstrapPromise: Promise;
  • mountPromise: Promise;
  • unmountPromise: Promise;

详情参考参考 qiankun官方文档

subscribe(callback: (value: FMicroEvent) => void): Unsubscribe

监听主子应用的事件和数据,callback 函数({ type: string; data: any }) => { 处理程序 } 目前通用返回加载完成事件 type: load,其他自定义事件由主子应用自行定义。

返回值:返回取消订阅的句柄。

5、FAQ

1、如何实现生成秘钥的算法?

实例代码-Node.js

const crypto = require('crypto');
/**
 * @params options: https request body
 * @params apiAppKey: 申请APAAS页面接入时生成的app_key, 请妥善保存
 * @params apiAppSecret: 申请APAAS页面接入时生成的secret, 请妥善保存
 * @return authorization: 生成的秘钥串
 * @return dateTime: 服务器当前时间
*/
interface GetAuthorizedHeaderProps {
  options: {
    method: 'GET' | 'POST' | 'DELETE' | 'PUT' | 'OPTIONS';
    headers: {
      Accept: string;
      'Content-Type': string;
      'Content-MD5': any;
    };
    path: string;
  };
  apiAppKey: string;
  apiAppSecret: string;
}
// 生成秘钥的主函数
export const getAuthorizedHeader = ({ options, apiAppKey, apiAppSecret }: GetAuthorizedHeaderProps) => {
  const dateTime = new Date().toUTCString();
  const signingStr = [
    `x-date: ${dateTime}`,
    options.method,
    options.headers.Accept,
    options.headers['Content-Type'],
    options.headers['Content-MD5'],
    options.path,
  ].join('\n');
  const signing = crypto.createHmac('sha1', apiAppSecret).update(signingStr, 'utf8').digest('base64');
  const sign = `hmac id="${apiAppKey}", algorithm="hmac-sha1", headers="x-date", signature="${signing}"`;
  return {
    authorization: sign,
    dateTime,
  };
};

其他语言DEMO待补充

2、如何决定采用何种路由方式去加载微应用?

主应用 xxx.qq.com/chatbot/ 对于即将集成进来的页面,例如云小微智能客服页面,其本身采用的是 vue-router/Hash 模式,因此引入其页面时必须适配其路由模式。 目前 SDK 在加载页面时,提供了三种路由适配模式,来应对不同场景的引入,

1、useNativeRoute = 0 采用配置端数据返回的路由路径 2、useNativeRoute = 1 采用当前页面hash前缀 + 配置端数据返回的路由路径作为新路由 3、useNativeRoute = 3 采用当前的页面路由不做任何改动, 默认 0

这里以具体例子来讲解。

主应用要集成云小微智能客服/问答知识库页面,其hash地址是#/products/2a_1642564944681_44/-/qa_pairs/all/all

主应用如果采用后台返回的注册路径,即 useNativeRoute = 0,其页面路径会被替换成 xxx.qq.com/chatbot/#/products/2a_1642564944681_44/-/qa_pairs/all/all, 比较适用于主应用采用的 history 模式或者配置端直接接入的方式,不用关心路径中的参数配置,也是最推荐的模式。

主应用如果采用后台返回的注册路径,即 useNativeRoute = 1,引入页面已经存在了hash的部分路径#/jce,其页面路径会被替换成 xxx.qq.com/chatbot/#/jce/products/2a_1642564944681_44/-/qa_pairs/all/all, 比较适用于主应用采用的 hash 模式, 且页面路由要求存在特定前缀。这种模式能够保证同一页面能够被多次引入,且不干预主应用路由配置。

主应用如果采用后台返回的注册路径,即 useNativeRoute = 3,就是不对当前路由进行任何修改,采用主应用的路由来让子应用进行自行解析,比较适合和微应用同源的主应用进行引入。