我们正试图使用直接线路api向我们的机器人发送消息,然后在不使用直接线路api的情况下从我们的机器人中发送消息。为了做到这一点,我们需要一个不同于默认的直接线路api服务url的服务url
我们已经尝试在活动中放入不同的服务url,我们发送了直接线路api,但当活动发送到机器人程序时,直接线路api服务url会被填充
我们还尝试在活动中更改服务url,一旦它被发送到机器人程序,但机器人程序仍然尝试将其响应活动发送到直达api
我们实现这一目标的唯一方法是执行以下操作:
((Microsoft.Bot.Connector.IConnectorClient)turnContext.TurnState["Microsoft.Bot.Connector.IConnectorClient"]).BaseUri = new System.Uri("DIFFERENT_SERCVICE_URL");
虽然这是有效的,但我们认为这不是解决这个问题的最佳方法,我们可能不应该修改转弯状态
有没有更好的方法来更改此服务url?
机器人程序至少有三个级别可以向用户发送活动。TurnContext.SendActivities
调用BotAdapter.SendActivitiesAsync
,如果您使用的是BotFrameworkAdapter
,那么它又使用存储在轮次状态中的连接器客户端调用Conversations.SendToConversationAsync
。这三个方法族都可用于您的机器人程序,因此,如果您想绕过turn上下文,则可以直接使用适配器;如果您想跳过适配器,则可以使用连接器客户端。
您已经发现,当您尝试使用turn上下文发送活动时,您的活动会被发送到连接器客户端的基本URI。如果您不想修改处于turn状态的连接器客户端,那么您可以创建一个不同的连接器客户端并使用它。