首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找不到BotFramework对话

找不到BotFramework对话
EN

Stack Overflow用户
提问于 2021-02-25 23:18:28
回答 1查看 241关注 0票数 0

我一直在尝试测试一个函数应用程序,它将一个活动发送到一个已有会话的机器人上,但为了简化这篇文章,我将通过邮递员发送它。我一直遇到一个问题,conversationId没有被找到,尽管我事先确认了它确实存在,而且我不完全确定我做错了什么。

我登录到门户网站azure,然后转到我的机器人进行网络聊天测试。我验证了机器人的身份,对话就开始了。

在这里,通过检查Chromes调试工具中的对话调用响应,我已经检查了conversationId,在本例中是1GJ0N9UYKGyELu3LqpDF6b-a

这是确切的对话响应。

代码语言:javascript
复制
conversationId: "1GJ0N9UYKGyELu3LqpDF6b-a"
expires_in: 3600
referenceGrammarId: "fcab5fbf-67c7-bf55-934a-274e525c78a9"
streamUrl: "wss://webchat.botframework.com/v3/directline/conversations/1GJ0N9UYKGyELu3LqpDF6b-a/stream?watermark=-&t=ew0KICAi...."
token: "ew0KICA..."

因此,在我看来,我应该能够在postman中执行以下操作

代码语言:javascript
复制
POST https://webchat.botframework.com/v3/directline/conversations/1GJ0N9UYKGyELu3LqpDF6b-a/activities
Content-Type: application/json
Authorization: Bearer {My webchats channels secret code}
Body:
{
  "type": "message",
  "from": {
    "name": "foo"
  },
  "text": "bar"
}

我期望200OK和消息'bar‘会出现在我的网络聊天测试中,来自'foo',但它没有。相反,我在postman中得到了一个错误,声明:

代码语言:javascript
复制
{
    "error": {
        "code": "BadArgument",
        "message": "Conversation not found"
    }
}

这到底是怎么回事呢?如果我刚刚创建了该对话,并且可以证明conversationId正在使用中,为什么post消息说找不到它?我是否错误地使用了通道?还是在做一些显而易见的事情?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-02 06:20:57

所以回答我自己的问题,长话短说。看起来Microsoft文档中提供的示例活动并没有完全解决这个问题。有

一些东西

否则这是必需的,尽管我没有时间来缩小范围。

我采取的解决方案是编写一个方法,将活动作为身份验证流的一部分保存到cosmosDb,因为我的时间不多了。这样,我就有了一个铁板一块的活动,我知道它至少在对话的调用阶段起到了作用,我知道对话引用是正确的和存在的。从那里,我拉出了活动,并更改了其中的4个字段。

代码语言:javascript
复制
activity.Type = "message",
activity.From = new From { Id = "{BotId}", Name = "Gilbert Bottfried", Role = "bot },
activity.Text = "{My message}",
activity.Subject = "{my message subject}"

从那时起,基本上就是创建一个连接器客户端并触发这个重新调整用途的活动的情况。

代码语言:javascript
复制
AppCredentials.TrustServiceUrl(serviceUrl, DateTime.MaxValue);
ConnectorClient client = new ConnectorClient(
    new Uri(serviceUrl),
    MicrosoftAppId,
    MicrosoftAppPassword);

await client.Conversations.SendToConversationAsync(activity.Conversation.Id, activity);

看起来这已经足够让它工作了,而且它为将来的消息提供了一个很好的可引用的会话Id。尽管我发现了使用WebChat的其他问题,因为我怀疑通过websockets发送消息和抛出消息并不完全稳定。在msteams上的测试体验要稳定得多,它似乎可以像冠军一样处理我接二连三的测试消息。

这本质上是一种暴力方法,因为我存储和发送了许多不必要的数据,但它是有效的。我可能会附加这个答案来削减我发现的未来需要的东西,但这将需要测试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66371375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档