Аутентифицировать пользователя

Агенты обычно имеют мало информации о пользователях, с которыми они общаются, за исключением информации, которую пользователи предоставляют во время разговора. Однако агенты могут аутентифицировать пользователей с помощью OAuth, чтобы подтвердить личность пользователя, персонализировать разговоры и выполнять действия от имени пользователей.

В этом потоке разговора пользователь решает добавить кредиты в свою учетную запись, и агент предлагает пользователю войти в систему, чтобы подтвердить личность пользователя, получить известную информацию о пользователе и разместить заказ на кредиты.

  1. Пользователь начинает разговор с агентом.
  2. Как только пользователь начинает вводить ответ, он отправляет агенту событие ввода.

    {
     
    "agent": "brands/1111/agents/2222",
     
    "conversationId": "3333",
     
    "customAgentId": "oauth",
     
    "requestId": "1234567890",
     
    "userStatus": {
       
    "isTyping": "true",
       
    "createTime": "2020-10-02T15:01:23.045123456Z",
     
    },
     
    "sendTime": "2020-10-02T15:01:24.045123456Z",
    }
  3. Пользователь отправляет сообщение «Привет, я хотел бы добавить 5 кредитов на свой счет».

    {
     
    "agent": "brands/1111/agents/2222",
     
    "conversationId": "3333",
     
    "customAgentId": "oauth",
     
    "requestId": "123123123",
     
    "message": {
       
    "messageId": "4444",
       
    "name": "conversations/12345/messages/67890",
       
    "text": "Hi, I'd like to add 5 credits to my account",
       
    "createTime": "2020-10-02T15:05:23.045123456Z",
     
    },
     
    "context": {
       
    "entryPoint": "PLACESHEET",
       
    "userInfo": {
         
    "displayName": "Michael",
         
    "userDeviceLocale": "en",
       
    },
       
    "resolvedLocale": "en",
     
    }
     
    "sendTime": "2020-10-02T15:05:24.045123456Z",
    }
  4. Агент отправляет сообщение: «Я могу вам с этим помочь. Войдите в свою учетную запись, чтобы продолжить». вместе с предложением запроса аутентификации.

    clientId и scopes определяются поставщиком OAuth. Агент генерирует значение codeChallenge в соответствии с требованиями провайдера OAuth.

    curl -X POST "https://businessmessages.googleapis.com/v1/conversations/3333/messages" \
    -H "Content-Type: application/json" \
    -H "`oauth2l header --json path/to/service/account/key.json businessmessages`" \
    -d "{
      'messageId': '5555',
      'text': 'I can help you with that. Sign into your account to continue.',
      'suggestions': [
        {
          'AuthenticationRequest': {
            'clientId': 'oauth_client_id_1234567890',
            'codeChallenge': 'code_challenge',
            'scopes': [
              'account',
              'billing',
            ],
          },
        },
      ],
      'representative': {
        'avatarImage': 'https://oauth.agent/bot-avatar.jpg',
        'displayName': 'OAuth Agent',
        'representativeType': 'BOT'
      }
    }"

  5. Пользователь получает сообщение, нажимает на предложение запроса аутентификации и входит в свою учетную запись.

  6. Агент получает сообщение с кодом авторизации OAuth в поле authenticationResponse.code .

    {
     
    "agent": "brands/1111/agents/2222",
     
    "conversationId": "3333",
     
    "customAgentId": "oauth",
     
    "requestId": "1234567895",
     
    "authenticationResponse": {
       
    "code": "fkhoe541658sfk684d135j186mngkjdrt5425415a2s1dfa68s4edf",
       
    },
     
    }
     
    "sendTime": "2020-10-02T15:01:24.045123456Z",
    }
  7. Агент связывается с провайдером OAuth, обменивая код авторизации на токен доступа и получая информацию об учетной записи пользователя.

  8. Агент отправляет сообщение: «Спасибо за вход. В настоящее время у вас есть 2 кредита. Для подтверждения вы хотите, чтобы я добавил 5 кредитов в вашу учетную запись и выставил счет с помощью метода оплаты по умолчанию?» в виде сообщения с «Да» и «Нет» в качестве предлагаемых ответов.

    curl -X POST "https://businessmessages.googleapis.com/v1/conversations/3333/messages" \
    -H "Content-Type: application/json" \
    -H "`oauth2l header --json path/to/service/account/key.json businessmessages`" \
    -d "{
      'messageId': '7777',
      'text': 'Thanks for signing in. You currently have 2 credits. To confirm, you'd like to me to add 5 credits to your account and bill your default payment method?',
      'suggestions': [
        {
          'reply': {
            'text': 'Yes',
            'postbackData': 'process-transaction',
          },
        },
        {
          'reply': {
            'text': 'No',
            'postbackData': 'cancel-transaction',
          },
        },
      ],
      'representative': {
        'avatarImage': 'https://oauth.agent/bot-avatar.jpg',
        'displayName': 'OAuth Agent',
        'representativeType': 'BOT'
      }
    }"

  9. Пользователь нажимает на предложенный ответ «Да».

    {
     
    "agent": "brands/1111/agents/2222",
     
    "conversationId": "3333",
     
    "customAgentId": "oauth",
     
    "requestId": "1234567898",
     
    "suggestionResponse": {
       
    "message": "conversations/333/messages/8888",
       
    "postbackData": "process-transaction",
       
    "createTime": "2020-10-02T15:01:26.045123456Z",
       
    "text": "Yes",
       
    "suggestionType": "REPLY",
     
    }
     
    "sendTime": "2020-10-02T15:01:27.045123456Z",
    }
  10. Агент обрабатывает транзакцию, используя токен доступа OAuth, а затем отправляет сообщение «Отлично. Я только что добавил 5 кредитов на ваш счет. Чем еще я могу вам помочь?».

    curl -X POST "https://businessmessages.googleapis.com/v1/conversations/3333/messages" \
    -H "Content-Type: application/json" \
    -H "`oauth2l header --json path/to/service/account/key.json businessmessages`" \
    -d "{
      'messageId': '9999',
      'text': 'Great. I just added 5 credits to your account. Is there anything else I can help you with?',
      'representative': {
        'avatarImage': 'https://oauth.agent/bot-avatar.jpg',
        'displayName': 'OAuth Agent',
        'representativeType': 'BOT'
      }
    }"

  11. Пользователь отправляет «Нет, спасибо».

    {
     
    "agent": "brands/1111/agents/2222",
     
    "conversationId": "3333",
     
    "customAgentId": "oauth",
     
    "requestId": "123123133",
     
    "message": {
       
    "messageId": "4444",
       
    "name": "conversations/12345/messages/101010",
       
    "text": "No, thanks",
       
    "createTime": "2020-10-02T15:05:23.045123456Z",
     
    },
     
    "context": {
       
    "entryPoint": "PLACESHEET",
       
    "userInfo": {
         
    "displayName": "Michael",
         
    "userDeviceLocale": "en",
       
    },
       
    "resolvedLocale": "en",
     
    }
     
    "sendTime": "2020-10-02T15:05:28.045123456Z",
    }
  12. Агент отправляет сообщение: «Спасибо, что связались с нами. Хорошего дня!»

    curl -X POST "https://businessmessages.googleapis.com/v1/conversations/3333/messages" \
    -H "Content-Type: application/json" \
    -H "`oauth2l header --json path/to/service/account/key.json businessmessages`" \
    -d "{
      'messageId': '11111111',
      'text': 'Thanks for contacting us. Have a great day!',
      'representative': {
        'avatarImage': 'https://oauth.agent/bot-avatar.jpg',
        'displayName': 'OAuth Agent',
        'representativeType': 'BOT'
      }
    }"