botkit icon indicating copy to clipboard operation
botkit copied to clipboard

Webex Teams startPrivateConversation error: TypeError: Cannot read property 'id' of undefined

Open darrenparkinson opened this issue 5 years ago • 16 comments

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.

darrenparkinson avatar Feb 10 '20 07:02 darrenparkinson

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...

dstaudt avatar Mar 07 '20 07:03 dstaudt

@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?

benbrown avatar Mar 11 '20 17:03 benbrown

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.

stale[bot] avatar May 16 '20 22:05 stale[bot]

not stale

benbrown avatar May 18 '20 15:05 benbrown

Is this issue still open? i'm having exactly the same issue in botkit for webexteams.

gerice92 avatar Jun 29 '20 08:06 gerice92

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.

stale[bot] avatar Oct 25 '20 15:10 stale[bot]

Issue still exists and developers are still running into it...humbly bumped.

dstaudt avatar Oct 30 '20 02:10 dstaudt

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.

benbrown avatar Oct 30 '20 14:10 benbrown

Sounds good, happy to help with testing/validation if useful.

dstaudt avatar Oct 30 '20 14:10 dstaudt

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.

stale[bot] avatar Jan 10 '21 14:01 stale[bot]

Bump to keep-alive, in hopes of a fix in 4.11

dstaudt avatar Jan 11 '21 19:01 dstaudt

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.

stale[bot] avatar Jun 11 '21 02:06 stale[bot]

Still present, bump in hopes of a fix

dstaudt avatar Jun 14 '21 18:06 dstaudt

Can anyone share a workaround for the time being?

seansbox avatar Dec 14 '21 23:12 seansbox

@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))

jcalve avatar Dec 15 '21 07:12 jcalve

What is the current status on this?

derchrisuk avatar May 04 '22 08:05 derchrisuk