RBM 에이전트는 Cloud Pub/Sub와의 게시/구독 관계를 통해 메시지와 이벤트를 수신합니다. 사용자가 에이전트에 메시지를 보내거나 이벤트를 생성하면 메시지 앱은 에이전트의 Pub/Sub 구독으로 정보를 전송하며, 여기에서 에이전트가 메시지 또는 이벤트에 액세스할 수 있습니다. 메시지 수신을 참조하세요.
에이전트의 Pub/Sub 구독 유형에 따라 에이전트가 메시지를 수신하는 방법이 결정되므로 에이전트가 메시지를 수신할 수 있으려면 먼저 Pub/Sub 구독을 구성해야 합니다. RBM 상담사는 pull 및 push 구독을 모두 지원합니다.
풀 구독
가져오기 구독을 사용하면 에이전트가 Cloud Pub/Sub에 연결하여 메시지, 이벤트, 기타 요청을 가져옵니다.
기본 요건
시작하기 전에 RBM 에이전트가 필요합니다.
설정
- 비즈니스 커뮤니케이션 개발자 콘솔을 열고 RBM Google 계정으로 로그인한 다음 에이전트를 클릭합니다.
- 왼쪽 탐색 메뉴에서 Integrations(통합)를 클릭합니다.
- 정기 결제 수정을 클릭합니다.
- 가져오기를 선택한 다음 저장을 클릭합니다.
- 가져오기 구독을 사용하도록 에이전트를 구성합니다.
- 가져오기 구독과 함께 샘플 에이전트를 사용하는 경우 샘플 README 파일의 안내를 따르세요.
- 샘플 에이전트를 사용하지 않는 경우 에이전트가 가져오기 구독을 사용할 수 있도록 하는 코드는 pull을 사용하여 메시지 수신을 참조하세요. 프로그래밍 언어에 따라 에이전트의 프로젝트 ID가 필요할 수 있습니다.
프로젝트 ID 확인
일부 가져오기 구독 메커니즘에서는 에이전트의 Google Cloud 프로젝트 (GCP) 프로젝트 ID를 지정해야 합니다. project/
다음에 오는 pull 구독 이름에 에이전트의 프로젝트 ID가 삽입됩니다.
- 비즈니스 커뮤니케이션 개발자 콘솔을 열고 RBM Google 계정으로 로그인한 다음 에이전트를 클릭합니다.
- 왼쪽 탐색 메뉴에서 Integrations(통합)를 클릭합니다.
- 에이전트의 구독 이름을 찾습니다.
project/
와 다음/
사이의 텍스트 세그먼트를 찾습니다. 이 ID는 에이전트의 프로젝트 ID입니다. 예를 들어 구독 이름이projects/rbm-growing-tree-bank-nbdjkl6t/subscriptions/rbm-agent-subscription
이면 에이전트의 프로젝트 ID는rbm-growing-tree-bank-nbdjkl6t
입니다.
C#
private async void InitPullMessages(string projectId, string jsonPath) { GoogleCredential googleCredential = null; using (var jsonStream = new FileStream(jsonPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { googleCredential = GoogleCredential.FromStream(jsonStream) .CreateScoped(SubscriberServiceApiClient.DefaultScopes); } SubscriptionName subscriptionName = new SubscriptionName(projectId, subscriptionId); SubscriberClient subscriber = new SubscriberClientBuilder { SubscriptionName = subscriptionName, GoogleCredential = googleCredential }.Build(); // setup listener for pubsub messages await subscriber.StartAsync( async (PubsubMessage message, CancellationToken cancel) => { string text = System.Text.Encoding.UTF8.GetString(message.Data.ToArray()); JObject jsonObject = JObject.Parse(jsonAsString); string userResponse = GetResponseText(jsonObject); string eventType = (string)jsonObject["eventType"]; // check if the message is a user response message if ((userResponse.Length > 0) && (eventType == null)) { string messageId = (string)jsonObject["messageId"]; string msisdn = (string)jsonObject["senderPhoneNumber"]; // let the user know their message has been read kitchenSinkBot.SendReadMessage(messageId, msisdn); HandleUserResponse(userResponse, msisdn); } await Console.Out.WriteLineAsync( $"Message {message.MessageId}: {jsonAsString}"); return SubscriberClient.Reply.Ack; }); } }이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
푸시 구독
푸시 구독을 사용하면 Cloud Pub/Sub에서 메시지, 이벤트, 기타 요청을 지정한 웹훅 URL로 푸시합니다.
기본 요건
시작하기 전에 다음이 필요합니다.
- RBM 상담사
- 다음을 지원하는 실시간 웹훅 엔드포인트 URL
- 유효한 SSL 인증서가 있는 HTTPS
POST
요청- 유효성 검사 요청에 대한 응답으로 매개변수를 에코하는 기능
설정
- 비즈니스 커뮤니케이션 개발자 콘솔을 열고 RBM Google 계정으로 로그인한 다음 에이전트를 클릭합니다.
- 왼쪽 탐색 메뉴에서 Integrations(통합)를 클릭합니다.
- 정기 결제 수정을 클릭합니다.
- 푸시를 선택합니다.
- 웹훅 엔드포인트 URL에 'https://'로 시작하는 웹훅 URL을 입력합니다.
지정된
clientToken
매개변수가 있는POST
요청을 수락하고secret
매개변수 값이 포함된200 OK
응답을 보내도록 웹훅을 구성합니다.예를 들어 웹훅이 다음과 같은 본문 콘텐츠가 포함된 POST 요청을 수신하는 경우
{ "clientToken":"SJENCPGJESMGUFPY", "secret":"1234567890" }
웹훅에서
clientToken
값을 확인해야 하며,clientToken
가 올바르면 본문이secret: 1234567890
인200 OK
응답을 반환합니다.콘솔에서 확인을 클릭합니다.
RBM 플랫폼에서 웹훅을 확인하면 Configure your webhook 대화상자가 닫힙니다.
저장을 클릭합니다.
웹훅에서 메시지를 수신하도록 에이전트를 구성합니다.
- 푸시 구독과 함께 샘플 에이전트를 사용하는 경우 샘플 README 파일의 안내를 따르세요.
- 샘플 에이전트를 사용하지 않는 경우 메시지를 웹훅에서 에이전트로 전달하도록 인프라를 구성합니다.
Node.js
let requestBody = req.body; if ((requestBody.hasOwnProperty('clientToken')) && (requestBody.hasOwnProperty('secret'))) { console.log('RBM webhook verification request'); // Confirm that the clientToken is the one we are seeing in the RBM console if (requestBody.clientToken == CLIENT_TOKEN) { console.log('Tokens match, returning secret'); res.status(200).send('secret: ' + requestBody.secret); } else { // Client tokens did not match - sending permission denied console.log('Tokens do not match'); res.sendStatus(403); } }
수신 메일 확인
웹훅은 모든 발신자로부터 메시지를 수신할 수 있으므로 메시지 콘텐츠를 처리하기 전에 Google이 수신 메시지를 보냈는지 확인해야 합니다.
Google에서 수신한 메시지를 보냈는지 확인하려면 다음 단계를 따르세요.
- 메일의
X-Goog-Signature
헤더를 추출합니다. 메시지 본문 페이로드의 해시 및 base64 인코딩 사본입니다. - 요청의
message.body
요소에서 RBM 페이로드를 Base-64로 디코딩합니다. - 푸시 구독을 설정할 때 지정한 웹훅의 클라이언트 토큰을 키로 사용하여 base-64 디코딩된 메시지 페이로드 바이트의 SHA512 HMAC를 만들고 결과를 base64로 인코딩합니다.
X-Goog-Signature
해시를 직접 만든 해시와 비교합니다.- 해시가 일치하면 Google에서 메시지를 보낸 것입니다.
해시가 일치하지 않으면 정상으로 알려진 메시지의 해싱 프로세스를 확인합니다.
해싱 프로세스가 올바르게 작동하고 있으며 허위로 의심되는 메시지를 받은 경우 Google에 문의하세요.
Node.js
if ((requestBody.hasOwnProperty('message')) && (requestBody.message.hasOwnProperty('data'))) { // Validate the received hash to ensure the message came from Google RBM let userEventString = Buffer.from(requestBody.message.data, 'base64'); let hmac = crypto.createHmac('sha512', CLIENT_TOKEN); let data = hmac.update(userEventString); let genHash = data.digest('base64'); let headerHash = req.header('X-Goog-Signature'); if (headerHash === genHash) { let userEvent = JSON.parse(userEventString); console.log('userEventString: ' + userEventString); handleMessage(userEvent); } else { console.log('hash mismatch - ignoring message'); } } res.sendStatus(200);
다음 단계
구독을 구성하고 Cloud Pub/Sub와 통신하도록 에이전트를 설정하면 에이전트가 테스트 기기에서 메시지를 수신할 수 있습니다. 설정을 검증하는 메시지를 전송합니다.