botkit
botkit copied to clipboard
Webex Teams startPrivateConversation error: TypeError: Cannot read property 'id' of undefined
What are you trying to achieve or the steps to reproduce?
In Webex Teams, after a group chat message, I am trying to initiate a private conversation with the user that initiated the chat using await bot.startPrivateConversation(message.user)
What was the result you received?
On doing this, I receive the following error:
TypeError: Cannot read property 'id' of undefined
It is this line in conversationState.js
that is throwing the error:
const conversationId: string = Object.keys(activity.conversation).sort().map((key) => activity.conversation[key]).filter((val) => val !== '' && val !== null && typeof val !== 'undefined').join('-') + '-' + activity.from.id;
This seems to be because activity.conversation
essentially just contains { id: 'temporary-value' }
and this.changeContext
is returning an empty object.
And in botworker.js
, the BotWorker.changeContext
function never gets past this line:
const dialogContext = yield this._controller.dialogSet.createContext(turnContext);
What did you expect?
I expected a direct conversation with the user.
Context:
- Botkit version: 4.6.2
- Messaging Platform: Webex Teams
- Node version: v10.16.0
- Os: macOS Catalina 10.15.2
- Any other relevant information:
It seems this may be a known issue because the documentation for startPrivateConversation says:
Change the context of the next message Due to a quirk in the Webex API, we can't know the address of the DM until after sending the first message. As a result, the internal tracking for this conversation can't be persisted properly. USE WITH CAUTION while we try to sort this out.
This seems to imply that it should work at some level?
Thanks.
Seeing the same issue. Perhaps an approach could be to go ahead and accept a required message parameter in startPrivateConversation (as well as startConversationInRoom). The function could then go ahead and send the message, await the response, and extract the roomId/from etc. so that context creation works correctly...
@darrenparkinson what do you think of the above proposed solution, that the startPrivateConversation and related features take a first message
parameter that is used to create the conversation ID?
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
not stale
Is this issue still open? i'm having exactly the same issue in botkit for webexteams.
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
Issue still exists and developers are still running into it...humbly bumped.
hey @dstaudt thanks for the bump.
I think we should go ahead and implement your suggested fix - require a message to begin the conversation.
I can do this for the next release.
Sounds good, happy to help with testing/validation if useful.
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
Bump to keep-alive, in hopes of a fix in 4.11
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
Still present, bump in hopes of a fix
Can anyone share a workaround for the time being?
@seansbox this workaround works for me, replace toPersonEmail
with roomId
for room messages.
let bot = await controller.spawn();
let message = "The message";
let user_email = "[email protected]";
bot.api.messages
.create({ // This already sends the message
toPersonEmail: user_email,
markdown: message,
})
.then((message) => maybe_do_something_after(message))
What is the current status on this?