Botframework创建Directline从服务器获取令牌

问题描述

我第一次将令牌从createdirectline保存到服务器上。但是,只要我从服务器获取令牌并使用它,它就不会使用该令牌,而是会创建一个新令牌。

  React.useEffect(() => {
    const temp = async () => {
      if (Object.entries(directline).length === 0) {
          if(await props.chatbotData!.tokenFromDb){
            setDirectline(createDirectLine({ token: props.chatbotData.tokenFromDb.toString() }));
          }else {
            setDirectline(createDirectLine({ token: DIRECTLINE_SECRET }));
          }
 
      }
    };
    temp();
  },[directline,props.chatbotData]);
  const [directline,setDirectline]: any = useState({});

解决方法

您要在服务器端保存直接线secret,以便无法访问令牌,而不是令牌。调用secret/directline/tokens/generate时使用/directline/conversations来检索令牌(如果是后者,则返回conversationId)。 (参考WebDriverWaitConnect a bot to Direct Line。)

简而言之,这是您的网站应遵循的流程:

  1. 加载了Web聊天的网站。
  2. 在网络聊天实例化时,将对您的“令牌”服务器(即https://.../gettoken)进行API调用。
  3. 调用“令牌”服务器令牌API时,它将通过/directline/tokens/generate来调用secret,然后返回token
  4. 令牌返回到您的呼叫网站,然后将其传递给createDirectLine()使用。

请务必注意,在撰写本文时,令牌在过期之前只能使用30分钟。如果您希望对话持续30分钟以上,那么您将需要执行类似的过程来预先将令牌交换为刷新的令牌。

希望有帮助!