BotFramework-DirectLineJS, Microsoft Bot的框架行协议直接客户端库

分享于 

10分钟阅读

GitHub

  繁體 雙語
JavaScript client library for Microsoft Bot Framework's Direct Line protocol
  • 源代码名称:BotFramework-DirectLineJS
  • 源代码网址:http://www.github.com/Microsoft/BotFramework-DirectLineJS
  • BotFramework-DirectLineJS源代码文档
  • BotFramework-DirectLineJS源代码下载
  • Git URL:
    git://www.github.com/Microsoft/BotFramework-DirectLineJS.git
    Git Clone代码到本地:
    git clone http://www.github.com/Microsoft/BotFramework-DirectLineJS
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/Microsoft/BotFramework-DirectLineJS
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    botframework-directlinejs

    ,,,,protocol,protocol,protocol,protocol,protocol。

    WebChat 使用,因此是( 按扩展名) 模拟器。WebChat通道和Azure Bot服务( )。

    常见问题解答

    谁是 for?

    构建框架JavaScript客户端的任何人都不想使用 WebChat。

    如果当前使用 WebChat,则不需要进行任何更改,因为它包含这里包。

    示例 below 中的subscribe() 方法是什么?

    这个库处理异步操作,而不是回调或者承诺。 试试吧,你会喜欢的 ! 有关更多信息,请查看 RxJS

    我可以使用打字

    你下注。

    :这个库如何准备好

    这是微软官方支持的库,被认为是完全完整的。 将来的变更( 除了支持将来对直接线路协议的更新外) 可能会限制到 Bug 修复。性能改进。教程和示例。 这里最重要的部分是单元测试。

    也就是说,public API仍然可以改变。

    如何从源代码生成

    • 克隆这里 repo
    • npm install
    • 在每次更改时 npm run build ( 或者 npm run watch,或者 npm run prepublish 以生成生产)

    如何在你的应用程序中包含

    有几种方法:

    • 从头开始构建,并在应用程序中包含 /directLine.js ( 带RxJS的webpacked ) 或者 built/directline.js
    • 使用 unpkg CDN,比如 <script src="http://unpkg.com/botframework-directlinejs/directLine.js"/>
    • npm install botframework-directlinejs

    在 node 环境中使用

    这个库使用 RxJS/ajaxobserverable,这是在DOM环境中使用的。 这并不意味着你也不能从 node 使用它,但是只需要做几件额外的事情:

    • npm install --save xhr2
    • 将以下内容添加到主应用程序 file:的顶部
    global.XMLHttpRequest=require("xhr2");

    如何创建和使用directLine对象

    为你的bot获取安全凭证:

    • 如果你还没有,那么你的机器人就会。
    • 添加 DirectLine ( WebChat ) 通道,并生成直接行密钥。 确保已经启用直接行 3.0.
    • 对于测试,可以使用直接行秘密作为安全令牌,但是对于生产,你可能希望在直接行文档中对令牌进行交换,如图5 所示。

    创建DirectLine对象:

    import { DirectLine } from'botframework-directlinejs';var directLine =newDirectLine({
     secret: /* put your Direct Line secret here */,
     token: /* or put your Direct Line token here (supply secret OR token, not both) */,
     domain: /* optional: if you are not using the default Direct Line endpoint, e.g. if you are using a region-specific endpoint, put its full URL here */webSocket: /* optional: false if you want to use polling GET to receive messages. Defaults to true (use WebSocket). */,
     pollingInterval: /* optional: set polling interval in milliseconds. Default to 1000 */,
    });

    将活动发布到 bot:

    directLine.postActivity({
     from: { id: 'myUserId', name: 'myUserName' }, // required (from.name is optional) type: 'message',
     text: 'a message for you, Rudy'}).subscribe(
     id=>console.log("Posted activity, assigned ID ", id),
     error=>console.log("Error posting activity", error)
    );

    你还可以通过提供活动中相应的字段来发布带有附件的消息,而非消息活动( 例如事件)。

    侦听从bot发送的活动:

    directLine.activity$.subscribe(
     activity=>console.log("received activity ", activity)
    );

    你可以在传入的活动中使用RxJS运算符。 仅查看消息活动:

    directLine.activity$.filter(activity=>activity.type==='message')
    .subscribe(
     message=>console.log("received message ", message)
    );

    直接行将有助于向客户端发送每个已经发送活动的副本,因这里通常的Pattern 是筛选 from 上的传入消息:

    directLine.activity$.filter(activity=>activity.type==='message'&&activity.from.id==='yourBotHandle')
    .subscribe(
     message=>console.log("received message ", message)
    );

    监视器连接状态

    订阅 postActivity 或者 activity$ 将启动连接到bot的进程。 应用程序可以侦听连接状态并适当地响应:

    import { ConnectionStatus } from'botframework-directlinejs';directLine.connectionStatus$.subscribe(connectionStatus=> {
     switch(connectionStatus) {
     caseConnectionStatus.Uninitialized: // the status when the DirectLine object is first created/constructedcaseConnectionStatus.Connecting: // currently trying to connect to the conversationcaseConnectionStatus.Online: // successfully connected to the converstaion. Connection is healthy so far as we know.caseConnectionStatus.ExpiredToken: // last operation errored out with an expired token. Your app should supply a new one.caseConnectionStatus.FailedToConnect: // the initial attempt to connect to the conversation failed. No recovery possible.caseConnectionStatus.Ended: // the bot ended the conversation }
    });

    重新连接到会话

    如果应用程序通过传递令牌创建DirectLine对象,DirectLine将每隔 15分钟刷新一次令牌。 客户端是否会失去连接( 比如。 关闭笔记本电脑,无法支付互联网接入帐单,进入隧道,connectionStatus$ 将改为 ConnectionStatus.ExpiredToken。 应用程序可以从它的服务器请求一个新的令牌,它应该调用重新连接 API。 然后,应用程序可以将结果会话对象传递给 DirectLine,这将

    var conversation =/* a Conversation object obtained from your app's server */;directLine.reconnect(conversation);

    恢复现有会话

    当在WebChat中使用DirectLine时,关闭当前标签或者刷新页面将在大多数情况下创建新的对话。 你可以恢复现有会话以使用户处于同一上下文中。

    使用 secret 时,你可以恢复会话:

    • 存储 conversationid ( 在永久的位置,比如本地存储)
    • 在创建DirectLine对象和密钥时返回这里值
    import { DirectLine } from'botframework-directlinejs';const dl =newDirectLine({
     secret: /* SECRET */,
     conversationId: /* the conversationid you stored from previous conversation */});

    使用令牌时,你可以在以下情况下继续进行会话:

    • 存储conversationid和令牌( 在永久的,像本地存储)
    • 调用DirectLine重新连接API以获得刷新的令牌和 streamURL
    • 使用 ConversationId。Token和StreamUrl创建DirectLine对象
    import { DirectLine } from'botframework-directlinejs';const dl =newDirectLine({
     token: /* the token you retrieved while reconnecting */,
     streamUrl: /* the streamUrl you retrieved while reconnecting */,
     conversationId: /* the conversationid you stored from previous conversation */});

    获取直接行缓存的历史记录的: 你可以使用水印检索历史记录: 你可以将水印视为活动'书签'。 恢复场景将从你指定的水印中重播所有会话活动。 目前,仅在使用DirectLine的轮询版本时才有效。

    import { DirectLine } from'botframework-directlinejs';const dl =newDirectLine({
     token: /* the token you retrieved while reconnecting */,
     streamUrl: /* the streamUrl you retrieved while reconnecting */,
     conversationId: /* the conversationid you stored from previous conversation */,
     watermark: /* a watermark you saved from a previous conversation */,
     webSocket: false});

    未来将支持带有 web socket的水印。

    版权&许可证

    © 2017微软公司

    MIT许可证


    JAVA  Javascript    DIR  proto  protocol  
    相关文章