RBM 상담사는 메시지를 주고받아 사용자와 소통합니다. 상담사는 사용자에게 메시지를 보내기 위해 RCS Business Messaging API에 메시지 요청을 보냅니다. 단일 요청에는 추천 답글 및 추천 작업 외에도 텍스트, 리치 카드, 이미지, 동영상이 포함될 수 있습니다.
기기에서 RCS를 지원하지 않거나 RCS가 사용 설정되지 않은 사용자에게 메시지를 보내면 RBM 플랫폼에서 404 오류를 반환합니다. 이 경우 인프라에 정의된 대체 메서드를 통해 사용자에게 도달해 볼 수 있습니다.
상담사가 아직 실행되지 않은 네트워크 또는 RCS 트래픽을 사용 설정하지 않은 네트워크에서 RCS 사용자에게 메시지를 보내면 RBM 플랫폼에서 403 오류를 반환합니다.
사용자의 기기에서 지원하지 않는 기능이 포함된 메시지를 보내면 RBM 플랫폼에서 오류를 반환하고 메시지를 전송하지 않습니다.
멀티채널 메시지 전략의 일환으로 적절한 시간이 지나도 전송되지 않은 메시지를 취소하고 다른 채널을 통해 전송하는 것이 가장 좋습니다. 사전 정의된 시간에 메시지를 자동으로 취소하려면 메시지 만료를 설정하세요.
수신자가 오프라인 상태임
수신자가 오프라인 상태이더라도 RBM 플랫폼은 전송할 메시지를 계속 수락합니다. 200 OK 응답이 수신되고 RBM 플랫폼에서 메시지를 보관하고 30일 동안 재전송을 시도합니다. RBM에 메시지를 다시 보내 달라고 요청할 필요는 없습니다.
RBM은 전송된 후 30일이 지나면 전송되지 않은 메시지를 삭제합니다.
상담사의 사용 사례에 따라 이 30일의 제한 시간 전에 전송되지 않은 메시지를 취소하는 것이 좋습니다. 취소하면 오프라인 사용자가 다시 온라인 상태가 되었을 때 오래된 메시지를 받지 못할 수 있습니다. 메시지를 취소하는 방법에는 여러 가지가 있습니다.
- 취소 요청을 전송하여 취소를 트리거합니다.
- 메시지 만료를 설정하여 적절한 시점에 메시지를 자동으로 취소합니다.
메시지 만료 설정
상담사의 메시지가 시간에 민감한가요? 예를 들어 OTP는 짧은 시간 동안만 유효합니다. 기간 한정 혜택은 만료됩니다. 또한 약속 날짜가 지나면 약속 알림은 더 이상 관련성이 없습니다. 시의적절하고 관련성 높은 메시지를 전송하려면 메일 만료를 설정하세요. 이렇게 하면 오프라인 사용자가 다시 온라인 상태가 되었을 때 오래된 콘텐츠를 수신하지 못하게 할 수 있습니다. 만료는 사용자가 필요한 정보를 제때 받을 수 있도록 대체 메시지 전략을 호출하기에 좋은 신호입니다.
메시지 만료를 설정하려면 상담사 메시지에 다음 필드 중 하나를 지정합니다.
expireTime
: 메시지가 만료되는 정확한 시간(UTC)입니다.ttl
(time to live): 메시지가 만료되기 전까지의 시간입니다.
형식 지정 및 값 옵션은 AgentMessage
를 참고하세요.
메시지가 만료되면 RBM 플랫폼에서 메시지 전송을 중지하고 메시지가 자동으로 취소됩니다. 하지만 드물게 실패할 수 있습니다. 예를 들어 RBM 플랫폼에서 메시지를 전송하는 중에 API가 취소를 트리거할 수 있습니다. 만료된 메시지가 취소되었는지 확인하기 위해 RBM은 웹훅에 알림 이벤트를 전송합니다.
ttl
및 expireTime
의 최대값은 메시지 제출 후 15일입니다.
메일 크기 제한
전체 문자열화된 AgentMessage의 최대 크기는 250KB입니다. 리치 카드 및 기타 미디어는 이 크기 제한에 영향을 미칩니다. 메일의 텍스트 부분은 3,072자(영문 기준)로 제한됩니다.
RBM을 통해 전송할 수 있는 최대 파일 크기는 100MB입니다. 단일 RBM 메시지에는 PDF 또는 미디어 파일이 하나만 첨부될 수 있습니다. 자세한 내용은 미디어 및 PDF 파일을 참고하세요.
텍스트
가장 간단한 메시지는 텍스트로 구성됩니다. 텍스트 메시지는 시각적 요소, 복잡한 상호작용 또는 응답이 필요하지 않은 정보를 전달하는 데 가장 적합합니다.
예
다음 코드는 일반 텍스트 메시지를 전송합니다. 형식 지정 및 값 옵션은 phones.agentMessages.create
를 참고하세요.
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentMessages?messageId=MESSAGE_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d "{ 'contentMessage': { 'text': 'Hello, world!' } }"
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); let params = { messageText: 'Hello, world!', msisdn: '+12223334444', }; // Send a simple message to the device rbmApiHelper.sendMessage(params, function(response) { console.log(response); });이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
자바
import com.google.rbm.RbmApiHelper; … try { // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); // Send simple text message to user rbmApiHelper.sendTextMessage( "Hello, world!", "+12223334444" ); } catch(Exception e) { e.printStackTrace(); }이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
Python
# Reference to RBM Python client helper and messaging object structure from rcs_business_messaging import rbm_service from rcs_business_messaging import messages # Create a simple RBM text message message_text = messages.TextMessage('Hello, world!') # Send text message to the device messages.MessageCluster().append_message(message_text).send_to_msisdn('+12223334444')이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
C#
using RCSBusinessMessaging; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); rbmApiHelper.SendTextMessage( "Hello, world!", "+12223334444", );이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
기본 메시지 콘텐츠 - SMS 변환
이동통신사는 SMS 메시지를 RBM으로 이전하는 것을 지원하기 위해 결제 모델을 도입했습니다. 최대 160자(영문 기준)의 UTF-8 문자를 포함하는 RBM 메시지를 기본 메시지라고 합니다.
기본 메시지 전송 요청을 구성할 때 문자는 1바이트 (UTF-8)로 계산된다는 점에 유의하세요. 그림 이모티콘이나 다중 바이트 문자 집합과 같은 특수 문자가 포함된 메시지를 보내면 각 문자가 UTF-8 문자 2개로 계산됩니다.
상자에 텍스트를 입력하여 길이를 확인합니다.
사용자 인증을 위한 일회성 비밀번호
RBM을 사용하여 SMS Retriever API로 자동 사용자 인증을 위한 일회용 비밀번호 (OTP)를 전송할 수 있습니다. SMS Retriever 및 관련 API에 대해 자세히 알아보려면 SMS Retriever 문서를 참고하세요. SMS Retriever API에 등록된 앱의 자동 사용자 인증에 관한 자세한 내용은 이 흐름 다이어그램을 참고하세요.
인증 프로세스 중에 SMS Retriever API는 RBM 메시지를 수신 대기합니다. 이 메시지에는 OTP와 앱을 식별하는 해시가 포함되어야 합니다. 해시가 앱과 일치하면 OTP가 추출되어 자동 사용자 인증을 위해 앱으로 전달됩니다.
다음은 사용자 인증을 위한 샘플 RBM 문자 메시지입니다. 코드는 <OTP> <app hash>입니다.
예: Your code is 123456 M8tue43FGT.
미디어 및 PDF 파일
이미지, 동영상, 오디오 또는 PDF 파일이 포함된 메시지를 보낼 때 상담사는 공개적으로 액세스할 수 있는 콘텐츠의 URL을 제공하거나 파일을 직접 업로드해야 합니다. 미디어 파일의 경우 사용자가 콘텐츠를 클릭하기 전에 미리 볼 수 있는 썸네일 이미지를 지정할 수도 있습니다. 오디오 파일의 경우 기본 오디오 위젯이 자리표시자로 사용됩니다.
RBM 플랫폼은 파일을 60일 동안 캐시하며 API는 상담사가 사용자에게 보내는 메시지에 포함할 수 있는 파일 ID를 반환합니다. 60일이 지나면 RBM에서 캐시에서 파일을 삭제합니다.
URL로 파일을 지정할 때는 contentMessage.forceRefresh
를 false
로 설정하는 것이 좋습니다. contentMessage.forceRefresh
을 true
로 설정하면 URL 콘텐츠가 캐시된 경우에도 RBM이 지정된 URL에서 새 콘텐츠를 가져오도록 강제하므로 사용자의 메시지 전송 시간이 늘어납니다.
파일 크기 권장사항 및 한도에 관한 권장사항을 참고하세요.
파일 URL 예시
다음 코드는 이미지를 전송합니다. 형식 지정 및 값 옵션은 AgentContentMessage
를 참고하세요.
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentMessages?messageId=MESSAGE_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d "{ 'contentMessage': { 'contentInfo': { 'fileUrl': 'http://www.google.com/logos/doodles/2015/googles-new-logo-5078286822539264.3-hp2x.gif', 'forceRefresh': 'false' } } }"
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); let params = { fileUrl: 'http://www.google.com/logos/doodles/2015/googles-new-logo-5078286822539264.3-hp2x.gif', msisdn: '+12223334444', }; // Send an image/video to a device rbmApiHelper.sendMessage(params, function(response) { console.log(response); });이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
자바
import com.google.api.services.rcsbusinessmessaging.v1.model.AgentContentMessage; import com.google.api.services.rcsbusinessmessaging.v1.model.AgentMessage; import com.google.rbm.RbmApiHelper; … try { // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); String fileUrl = "http://www.google.com/logos/doodles/2015/googles-new-logo-5078286822539264.3-hp2x.gif"; // create media only message AgentContentMessage agentContentMessage = new AgentContentMessage(); agentContentMessage.setContentInfo(new ContentInfo().setFileUrl(fileUrl)); // attach content to message AgentMessage agentMessage = new AgentMessage(); agentMessage.setContentMessage(agentContentMessage); rbmApiHelper.sendAgentMessage(agentMessage, "+12223334444"); } catch(Exception e) { e.printStackTrace(); }이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
Python
# Reference to RBM Python client helper and messaging object structure from rcs_business_messaging import rbm_service from rcs_business_messaging import messages # Create media file attachment file_message = messages.FileMessage('http://www.google.com/logos/doodles/2015/googles-new-logo-5078286822539264.3-hp2x.gif') messages.MessageCluster().append_message(file_message).send_to_msisdn('+12223334444')이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
C#
using Google.Apis.RCSBusinessMessaging.v1.Data; using RCSBusinessMessaging; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); string fileUrl = "http://www.google.com/logos/doodles/2015/googles-new-logo-5078286822539264.3-hp2x.gif"; // Create content info with the file url ContentInfo contentInfo = new ContentInfo { FileUrl = fileUrl }; // Attach content info to a message AgentContentMessage agentContentMessage = new AgentContentMessage { ContentInfo = contentInfo, }; // Attach content to message AgentMessage agentMessage = new AgentMessage { ContentMessage = agentContentMessage }; rbmApiHelper.SendAgentMessage(agentMessage, "+12223334444");이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
또는 files.create
를 사용하여 메시지로 미디어를 보내기 전에 미디어를 업로드할 수 있습니다.
파일 업로드 예시
다음 코드는 동영상 파일과 썸네일 파일을 업로드한 다음 두 파일을 모두 메시지로 전송합니다. 형식 지정 및 값 옵션은 files.create
및 AgentContentMessage
를 참고하세요.
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/upload/v1/files?agentId=AGENT_ID" \ -H "Content-Type: video/mp4" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ --upload-file "FULL_PATH_TO_VIDEO_MEDIA_FILE"
# Capture server-specified video file name from response body JSON
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/upload/v1/files?agentId=AGENT_ID" \ -H "Content-Type: image/jpeg" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ --upload-file "FULL_PATH_TO_THUMBNAIL_MEDIA_FILE"
# Capture server-specified image file name from response body JSON
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentMessages?messageId=MESSAGE_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d "{ 'contentMessage': { 'uploadedRbmFile': { 'fileName': 'SERVER-SPECIFIED_VIDEO_FILE_NAME' 'thumbnailName': 'SERVER-SPECIFIED_THUMBNAIL_FILE_NAME' } } }"
지원되는 미디어 유형
RBM은 다음과 같은 미디어 유형을 지원합니다.
미디어 유형 | 문서 유형 | 확장 | 리치 카드와 호환됨 |
---|---|---|---|
application/ogg | OGG 오디오 | .ogx | 아니요 |
application/pdf | 아니요 | ||
audio/aac | AAC 오디오 | .aac | 아니요 |
audio/mp3 | MP3 오디오 | .mp3 | 아니요 |
audio/mpeg | MPEG 오디오 | .mpeg | 아니요 |
audio/mpg | MPG 오디오 | .mp3 | 아니요 |
audio/mp4 | MP4 오디오 | .mp4 | 아니요 |
audio/mp4-latm | MP4-latm 오디오 | .mp4 | 아니요 |
audio/3gpp | 3GPP 오디오 | .3gp | 아니요 |
image/jpeg | JPEG | .jpeg, .jpg | 예 |
image/gif | GIF | .gif | 예 |
image/png | PNG | .png | 예 |
video/h263 | H263 동영상 | .h263 | 예 |
video/m4v | M4V 동영상 | .m4v | 예 |
video/mp4 | MP4 동영상 | .mp4 | 예 |
video/mpeg4 | MPEG-4 동영상 | .mp4, .m4p | 예 |
video/mpeg | MPEG 동영상 | .mpeg | 예 |
동영상/webm | WEBM 동영상 | .webm | 예 |
권장 답변
추천 답변은 상담사가 어떻게 반응해야 하는지 알고 있는 응답을 제공하여 사용자를 대화로 안내합니다. 상담사는 추천 칩 목록 또는 리치 카드로 추천 답변을 보냅니다.
사용자가 추천 답글을 탭하면 상담사는 답글의 텍스트와 포스트백 데이터가 포함된 이벤트를 수신합니다.
추천 답글은 최대 25자(영문 기준)입니다.
예
다음 코드는 추천 답글 2개와 함께 텍스트를 전송합니다. 형식 지정 및 값 옵션은 SuggestedReply
를 참고하세요.
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentMessages?messageId=MESSAGE_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d "{ 'contentMessage': { 'text': 'Hello, world!', 'suggestions': [ { 'reply': { 'text': 'Suggestion #1', 'postbackData': 'suggestion_1' } }, { 'reply': { 'text': 'Suggestion #2', 'postbackData': 'suggestion_2' } } ] } }"
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); let suggestions = [ { reply: { 'text': 'Suggestion #1', 'postbackData': 'suggestion_1', }, }, { reply: { 'text': 'Suggestion #2', 'postbackData': 'suggestion_2', }, }, ]; let params = { messageText: 'Hello, world!', msisdn: '+12223334444', suggestions: suggestions, }; // Send a simple message with suggestion chips to the device rbmApiHelper.sendMessage(params, function(response) { console.log(response); });이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
자바
import com.google.api.services.rcsbusinessmessaging.v1.model.Suggestion; import com.google.rbm.RbmApiHelper; import com.google.rbm.SuggestionHelper; … try { // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); // Create suggestions for chip list List<Suggestion> suggestions = new ArrayList<Suggestion>(); suggestions.add( new SuggestionHelper("Suggestion #1", "suggestion_1").getSuggestedReply()); suggestions.add( new SuggestionHelper("Suggestion #2", "suggestion_2").getSuggestedReply()); // Send simple text message to user rbmApiHelper.sendTextMessage( "Hello, world!", "+12223334444", suggestions ); } catch(Exception e) { e.printStackTrace(); }이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
Python
# Reference to RBM Python client helper and messaging object structure from rcs_business_messaging import rbm_service from rcs_business_messaging import messages # Create text message to send to user text_msg = messages.TextMessage('Hello, world!') cluster = messages.MessageCluster().append_message(text_msg) # Append suggested replies for the message to send to the user cluster.append_suggestion_chip(messages.SuggestedReply('Suggestion #1', 'reply:suggestion_1')) cluster.append_suggestion_chip(messages.SuggestedReply('Suggestion #2', 'reply:suggestion_2')) # Send a simple message with suggestion chips to the device cluster.send_to_msisdn('+12223334444')이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
C#
using Google.Apis.RCSBusinessMessaging.v1.Data; using RCSBusinessMessaging; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); List<Suggestion> suggestions = new List<Suggestion> { // Create suggestion chips new SuggestionHelper("Suggestion #1", "suggestion_1").SuggestedReply(), new SuggestionHelper("Suggestion #2", "suggestion_2").SuggestedReply() }; // Send simple text message with suggestions to user rbmApiHelper.SendTextMessage( "Hello, world!", "+12223334444", suggestions );이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
권장 작업
추천 작업은 기기의 내장 기능을 활용하여 사용자를 대화로 안내합니다. 상담사는 사용자가 전화번호를 다이얼하거나, 지도에서 위치를 열거나, 위치를 공유하거나, URL을 열거나, 캘린더 일정을 만들도록 제안할 수 있습니다. 상담사는 추천 칩 목록 또는 리치 카드로 추천 작업을 전송합니다.
사용자가 추천 작업을 탭하면 에이전트는 작업의 포스트백 데이터가 포함된 이벤트를 수신합니다.
추천 작업은 최대 25자(영문 기준)까지 입력할 수 있습니다.
형식 지정 및 값 옵션은 SuggestedAction
를 참고하세요.
번호 입력
전화 걸기 작업은 사용자가 상담사가 지정한 전화번호를 다이얼하도록 안내합니다.
전화번호에는 숫자 (0-9
), 더하기 기호 (+
), 별표 (*
), 숫자 기호 (#
)만 포함할 수 있습니다. E.164 국제 형식 (예: +14155555555
)은 지원되지만 필수는 아닙니다. 즉, +14155555555
및 1011
는 모두 유효한 항목입니다.
예
다음 코드는 전화 걸기 작업을 전송합니다. 형식 지정 및 값 옵션은 DialAction
를 참고하세요.
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentMessages?messageId=MESSAGE_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d "{ 'contentMessage': { 'text': 'Hello, world!', 'suggestions': [ { 'action': { 'text': 'Call', 'postbackData': 'postback_data_1234', 'fallbackUrl': 'https://www.google.com/contact/', 'dialAction': { 'phoneNumber': '+15556667777' } } } ] } }"
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); // Define a dial suggested action let suggestions = [ { action: { text: 'Call', postbackData: 'postback_data_1234', dialAction: { phoneNumber: '+15556667777' } } }, ]; let params = { messageText: 'Hello, world!', msisdn: '+12223334444', suggestions: suggestions, }; // Send a simple message with a dial suggested action rbmApiHelper.sendMessage(params, function(response) { console.log(response); });이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
자바
import com.google.api.services.rcsbusinessmessaging.v1.model.DialAction; import com.google.api.services.rcsbusinessmessaging.v1.model.SuggestedAction; import com.google.api.services.rcsbusinessmessaging.v1.model.Suggestion; import com.google.rbm.RbmApiHelper; … try { // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); // Create suggestions for chip list List<Suggestion> suggestions = new ArrayList<Suggestion>(); // creating a dial suggested action DialAction dialAction = new DialAction(); dialAction.setPhoneNumber("+15556667777"); // creating a suggested action based on a dial action SuggestedAction suggestedAction = new SuggestedAction(); suggestedAction.setText("Call"); suggestedAction.setPostbackData("postback_data_1234"); suggestedAction.setDialAction(dialAction); // attaching action to a suggestion Suggestion suggestion = new Suggestion(); suggestion.setAction(suggestedAction); suggestions.add(suggestion); // Send simple text message with the suggestion action rbmApiHelper.sendTextMessage( "Hello, world!", "+12223334444", suggestions ); } catch(Exception e) { e.printStackTrace(); }이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
Python
# Reference to RBM Python client helper and messaging object structure from rcs_business_messaging import rbm_service from rcs_business_messaging import messages # Create a dial suggested action suggestions = [ messages.DialAction('Call', 'reply:postback_data_1234', '+15556667777') ] # Create text message to send to user text_msg = messages.TextMessage('Hello, world!') cluster = messages.MessageCluster().append_message(text_msg) # Append suggestions for the message to send to the user for suggestion in suggestions: cluster.append_suggestion_chip(suggestion) # Send a simple message with suggested action to the device cluster.send_to_msisdn('+12223334444')이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
C#
using Google.Apis.RCSBusinessMessaging.v1.Data; using RCSBusinessMessaging; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); // Create a dial an agent suggested action DialAction dialAction = new DialAction { PhoneNumber = "+15556667777" }; // Creating a suggested action based on a dial action SuggestedAction suggestedAction = new SuggestedAction { Text = "Call", PostbackData = "postback_data_1234", DialAction = dialAction }; // Attach action to a suggestion Suggestion suggestion = new Suggestion { Action = suggestedAction }; List<Suggestion> suggestions = new List<Suggestion> { suggestion }; rbmApiHelper.SendTextMessage( "Hello, world!", "+12223334444", suggestions );이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
위치 보기
위치 보기 작업은 사용자의 기본 지도 앱에 위치를 표시합니다. 위도와 경도 또는 사용자의 현재 위치를 기반으로 한 쿼리로 위치를 지정할 수 있습니다. 지도 앱에 표시되는 핀에 맞춤 라벨을 설정할 수도 있습니다.
예
다음 코드는 위치 보기 작업을 전송합니다. 형식 지정 및 값 옵션은 ViewLocationAction
를 참고하세요.
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentMessages?messageId=MESSAGE_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d "{ 'contentMessage': { 'text': 'Hello, world!', 'suggestions': [ { 'action': { 'text': 'View map', 'postbackData': 'postback_data_1234', 'fallbackUrl': 'https://www.google.com/maps/@37.4220188,-122.0844786,15z', 'viewLocationAction': { 'latLong': { 'latitude': "37.4220188', 'longitude': "-122.0844786' }, 'label': 'Googleplex' } } } ] } }"
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); // Define a view location suggested action let suggestions = [ { action: { text: 'View map', postbackData: 'postback_data_1234', viewLocationAction: { latLong: { latitude: 37.4220188, longitude: -122.0844786 }, label: 'Googleplex' } } }, ]; let params = { messageText: 'Hello, world!', msisdn: '+12223334444', suggestions: suggestions, }; // Send a simple message with a view location suggested action rbmApiHelper.sendMessage(params, function(response) { console.log(response); });이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
자바
import com.google.api.services.rcsbusinessmessaging.v1.model.ViewLocationAction; import com.google.api.services.rcsbusinessmessaging.v1.model.SuggestedAction; import com.google.api.services.rcsbusinessmessaging.v1.model.Suggestion; import com.google.rbm.RbmApiHelper; … try { // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); // Create suggestions for chip list List<Suggestion> suggestions = new ArrayList<Suggestion>(); // creating a view location suggested action ViewLocationAction viewLocationAction = new ViewLocationAction(); viewLocationAction.setQuery("Googleplex, Mountain View, CA"); // creating a suggested action based on a view location action SuggestedAction suggestedAction = new SuggestedAction(); suggestedAction.setText("View map"); suggestedAction.setPostbackData("postback_data_1234"); suggestedAction.setViewLocationAction(viewLocationAction); // attaching action to a suggestion Suggestion suggestion = new Suggestion(); suggestion.setAction(suggestedAction); suggestions.add(suggestion); // Send simple text message with the suggestion action rbmApiHelper.sendTextMessage( "Hello, world!", "+12223334444", suggestions ); } catch(Exception e) { e.printStackTrace(); }이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
Python
# Reference to RBM Python client helper and messaging object structure from rcs_business_messaging import rbm_service from rcs_business_messaging import messages # Create a view location suggested action suggestions = [ messages.ViewLocationAction('View map', 'reply:postback_data_1234', query='Googleplex, Mountain View, CA') ] # Create text message to send to user text_msg = messages.TextMessage('Hello, world!') cluster = messages.MessageCluster().append_message(text_msg) # Append suggestions for the message to send to the user for suggestion in suggestions: cluster.append_suggestion_chip(suggestion) # Send a simple message with suggested action to the device cluster.send_to_msisdn('+12223334444')이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
C#
using Google.Apis.RCSBusinessMessaging.v1.Data; using RCSBusinessMessaging; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); // create an view location action ViewLocationAction viewLocationAction = new ViewLocationAction { Query = "Googleplex Mountain View, CA" }; // Attach the view location action to a suggested action SuggestedAction suggestedAction = new SuggestedAction { ViewLocationAction = viewLocationAction, Text = "View map", PostbackData = "postback_data_1234" }; // Attach the action to a suggestion object Suggestion suggestion = new Suggestion { Action = suggestedAction }; List<Suggestion> suggestions = new List<Suggestion> { suggestion }; rbmApiHelper.SendTextMessage( "Hello, world!", "+12223334444", suggestions );이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
위치 공유
위치 공유 작업을 사용하면 사용자가 상담사에게 위치를 보낼 수 있습니다. 사용자가 지정한 위치가 반드시 사용자의 위치는 아닙니다.
예
다음 코드는 위치 공유 작업을 전송합니다. 형식 지정 및 값 옵션은 ShareLocationAction
를 참고하세요.
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentMessages?messageId=MESSAGE_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d "{ 'contentMessage': { 'text': 'Hello, world!', 'suggestions': [ { 'action': { 'text': 'Share your location', 'postbackData': 'postback_data_1234', 'shareLocationAction': {} } } ] } }"
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); // Define a share location suggested action let suggestions = [ { action: { text: 'Share your location', postbackData: 'postback_data_1234', shareLocationAction: { } } }, ]; let params = { messageText: 'Hello, world!', msisdn: '+12223334444', suggestions: suggestions, }; // Send a simple message with a share location suggested action rbmApiHelper.sendMessage(params, function(response) { console.log(response); });이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
자바
import com.google.api.services.rcsbusinessmessaging.v1.model.ShareLocationAction; import com.google.api.services.rcsbusinessmessaging.v1.model.SuggestedAction; import com.google.api.services.rcsbusinessmessaging.v1.model.Suggestion; import com.google.rbm.RbmApiHelper; … try { // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); // Create suggestions for chip list List<Suggestion> suggestions = new ArrayList<Suggestion>(); // creating a share location suggested action ShareLocationAction shareLocationAction = new ShareLocationAction(); // creating a suggested action based on a share location action SuggestedAction suggestedAction = new SuggestedAction(); suggestedAction.setText("Share location"); suggestedAction.setPostbackData("postback_data_1234"); suggestedAction.setShareLocationAction(shareLocationAction); // attaching action to a suggestion Suggestion suggestion = new Suggestion(); suggestion.setAction(suggestedAction); suggestions.add(suggestion); // Send simple text message with the suggestion action rbmApiHelper.sendTextMessage( "Hello, world!", "+12223334444", suggestions ); } catch(Exception e) { e.printStackTrace(); }이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
Python
# Reference to RBM Python client helper and messaging object structure from rcs_business_messaging import rbm_service from rcs_business_messaging import messages # Create a share location suggested action suggestions = [ messages.ShareLocationAction('Share location', 'reply:postback_data_1234') ] # Create text message to send to user text_msg = messages.TextMessage('Hello, world!') cluster = messages.MessageCluster().append_message(text_msg) # Append suggestions for the message to send to the user for suggestion in suggestions: cluster.append_suggestion_chip(suggestion) # Send a simple message with suggested action to the device cluster.send_to_msisdn('+12223334444')이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
C#
using Google.Apis.RCSBusinessMessaging.v1.Data; using RCSBusinessMessaging; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); // Create a share location action ShareLocationAction shareLocationAction = new ShareLocationAction(); // Attach the share location action to a suggested action SuggestedAction suggestedAction = new SuggestedAction { ShareLocationAction = shareLocationAction, Text = "Share location", PostbackData = "postback_data_1234" }; // Attach the action to a suggestion object Suggestion suggestion = new Suggestion { Action = suggestedAction }; List<Suggestion> suggestions = new List<Suggestion> { suggestion }; rbmApiHelper.SendTextMessage( "Hello, world!", "+12223334444", suggestions );이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
URL 열기
URL 열기 작업을 사용하면 상담사가 지정한 웹페이지로 사용자를 안내할 수 있습니다. 기본적으로 웹페이지는 사용자의 브라우저에서 열립니다. 사용자가 웹페이지에 기본 앱을 구성한 경우 해당 앱이 대신 열립니다. 이 경우 추천 작업 버튼의 아이콘이 앱 아이콘이 됩니다.
URL 열기 작업은 통합된 WebView도 지원합니다. WebView로 URL 열기를 참고하세요.
예
다음 코드는 URL 열기 작업을 전송합니다. 형식 지정 및 값 옵션은 OpenUrlAction
를 참고하세요.
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentMessages?messageId=MESSAGE_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d "{ 'contentMessage': { 'text': 'Hello, world!', 'suggestions': [ { 'action': { 'text': 'Open Google', 'postbackData': 'postback_data_1234', 'openUrlAction': { 'url': 'https://www.google.com' } } } ] } }"
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); // Define an open URL suggested action let suggestions = [ { action: { text: 'Open Google', postbackData: 'postback_data_1234', openUrlAction: { url: 'https://www.google.com' } } }, ]; let params = { messageText: 'Hello, world!', msisdn: '+12223334444', suggestions: suggestions, }; // Send a simple message with an open URL suggested action rbmApiHelper.sendMessage(params, function(response) { console.log(response); });이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
자바
import com.google.api.services.rcsbusinessmessaging.v1.model.OpenUrlAction; import com.google.api.services.rcsbusinessmessaging.v1.model.SuggestedAction; import com.google.api.services.rcsbusinessmessaging.v1.model.Suggestion; import com.google.rbm.RbmApiHelper; … try { // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); // Create suggestions for chip list List<Suggestion> suggestions = new ArrayList<Suggestion>(); // creating an open url suggested action OpenUrlAction openUrlAction = new OpenUrlAction(); openUrlAction.setUrl("https://www.google.com"); // creating a suggested action based on an open url action SuggestedAction suggestedAction = new SuggestedAction(); suggestedAction.setText("Open Google"); suggestedAction.setPostbackData("postback_data_1234"); suggestedAction.setOpenUrlAction(openUrlAction); // attaching action to a suggestion Suggestion suggestion = new Suggestion(); suggestion.setAction(suggestedAction); suggestions.add(suggestion); // Send simple text message with the suggestion action rbmApiHelper.sendTextMessage( "Hello, world!", "+12223334444", suggestions ); } catch(Exception e) { e.printStackTrace(); }이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
Python
# Reference to RBM Python client helper and messaging object structure from rcs_business_messaging import rbm_service from rcs_business_messaging import messages # Create an open url suggested action suggestions = [ messages.OpenUrlAction('Open Google', 'reply:postback_data_1234', 'https://www.google.com') ] # Create text message to send to user text_msg = messages.TextMessage('Hello, world!') cluster = messages.MessageCluster().append_message(text_msg) # Append suggestions for the message to send to the user for suggestion in suggestions: cluster.append_suggestion_chip(suggestion) # Send a simple message with suggested action to the device cluster.send_to_msisdn('+12223334444')이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
C#
using Google.Apis.RCSBusinessMessaging.v1.Data; using RCSBusinessMessaging; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); // Create an open url action OpenUrlAction openUrlAction = new OpenUrlAction { Url = "https://www.google.com" }; // Attach the open url action to a suggested action SuggestedAction suggestedAction = new SuggestedAction { OpenUrlAction = openUrlAction, Text = "Open Google", PostbackData = "postback_data_1234" }; // Attach the action to a suggestion object Suggestion suggestion = new Suggestion { Action = suggestedAction }; List<Suggestion> suggestions = new List<Suggestion> { suggestion }; rbmApiHelper.SendTextMessage( "Hello, world!", "+12223334444", suggestions );이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
WebView로 URL 열기
WebView로 URL 열기 작업은 기본 브라우저의 렌더링 엔진을 사용하여 메시지 앱 내부에서 지정된 웹페이지를 로드합니다. 이렇게 하면 사용자가 RBM 대화를 종료하지 않고도 웹페이지와 상호작용할 수 있습니다. WebView를 사용 설정하려면 OpenURLApplication
를 참고하세요.
WebView에는 세 가지 디스플레이 모드가 있습니다. 형식 지정 및 값 옵션은 WebviewViewMode
를 참고하세요.
- 전체: 웹페이지가 전체 화면을 차지합니다.
- 절반: 웹페이지가 화면의 절반을 차지합니다.
- Tall(세로 모드): 웹페이지가 화면의 3분의 2를 차지합니다.
예
다음 코드는 WebView 작업이 포함된 Open URL을 전송합니다. 형식 지정 및 값 옵션은 OpenURLAction
를 참고하세요.
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentMessages?messageId=MESSAGE_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d '{ "contentMessage": { "text": "Hello, world!", "suggestions": [ { "action": { "text": "Open Google", "postbackData": "postback_data_1234", "openUrlAction": { "url": "https://www.google.com", "application": "WEBVIEW", "webviewViewMode": "FULL", "description": "Accessibility description" } } } ] } }'
자바
import com.google.api.services.rcsbusinessmessaging.v1.model.OpenUrlAction; import com.google.api.services.rcsbusinessmessaging.v1.model.SuggestedAction; import com.google.api.services.rcsbusinessmessaging.v1.model.Suggestion; import com.google.rbm.RbmApiHelper; … try { String URL = "https://www.google.com"; // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); // Create suggestions for chip list List<Suggestion> suggestions = new ArrayList<Suggestion>(); // Create suggestion to view webpage in full mode Suggestion viewInFullMode = getUrlActionInWebview(URL, "FULL") suggestions.add(viewInFullMode); // create suggestion to view webpage in half mode Suggestion viewInHalfMode = getUrlActionInWebview(URL, "HALF") suggestions.add(viewInHalfMode); // create suggestion to view webpage in tall mode Suggestion viewInTallMode = getUrlActionInWebview(URL, "TALL") suggestions.add(viewInTallMode); // Send simple text message with the suggested action rbmApiHelper.sendTextMessage( "Hello, world!", "+12223334444", suggestions ); } catch(Exception e) { e.printStackTrace(); } /** * Creates a suggested action to open URL in webview. * * @return a suggestion object for an open URL in webview action . */ private Suggestion getUrlActionInWebview(String url, String viewMode) { // create an open url action OpenUrlAction openUrlAction = new OpenUrlAction(); openUrlAction.setUrl(url); openUrlAction.setApplication("WEBVIEW"); openUrlAction.setWebviewViewMode(viewMode); openUrlAction.setDescription("Accessibility description"); // attach the open url action to a suggested action SuggestedAction suggestedAction = new SuggestedAction(); suggestedAction.setOpenUrlAction(openUrlAction); suggestedAction.setText('display_text'); suggestedAction.setPostbackData('postback_data_123'); // attach the action to a suggestion object Suggestion suggestion = new Suggestion(); suggestion.setAction(suggestedAction); return suggestion; }
캘린더 일정 만들기
'Create calendar event'(캘린더 일정 만들기) 작업은 사용자의 캘린더 앱을 열고 지정된 정보로 새 일정을 만들기 시작합니다.
예
다음 코드는 캘린더 일정 만들기 작업을 전송합니다. 형식 지정 및 값 옵션은 CreateCalendarEventAction
를 참고하세요.
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentMessages?messageId=MESSAGE_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d "{ 'contentMessage': { 'text': 'Hello, world!', 'suggestions': [ { 'action': { 'text': 'Save to calendar', 'postbackData': 'postback_data_1234', 'fallbackUrl': 'https://www.google.com/calendar', 'createCalendarEventAction': { 'startTime': '2020-06-30T19:00:00Z', 'endTime': '2020-06-30T20:00:00Z', 'title': 'My calendar event', 'description': 'Description of the calendar event' } } } ] } }"
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); // Define a create calendar event suggested action let suggestions = [ { action: { text: 'Save to calendar', postbackData: 'postback_data_1234', createCalendarEventAction: { startTime: '2020-06-30T19:00:00Z', endTime: '2020-06-30T20:00:00Z', title: 'My calendar event', description: 'Description of the calendar event', }, } }, ]; let params = { messageText: 'Hello, world!', msisdn: '+12223334444', suggestions: suggestions, }; // Send a simple message with a create calendar event suggested action rbmApiHelper.sendMessage(params, function(response) { console.log(response); });이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
자바
import com.google.api.services.rcsbusinessmessaging.v1.model.CreateCalendarEventAction; import com.google.api.services.rcsbusinessmessaging.v1.model.SuggestedAction; import com.google.api.services.rcsbusinessmessaging.v1.model.Suggestion; import com.google.rbm.RbmApiHelper; … try { // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); // Create suggestions for chip list List<Suggestion> suggestions = new ArrayList<Suggestion>(); // creating a create calendar event suggested action CreateCalendarEventAction createCalendarEventAction = new CreateCalendarEventAction(); calendarEventAction.setTitle("My calendar event"); calendarEventAction.setDescription("Description of the calendar event"); calendarEventAction.setStartTime("2020-06-30T19:00:00Z"); calendarEventAction.setEndTime("2020-06-30T20:00:00Z"); // creating a suggested action based on a create calendar event action SuggestedAction suggestedAction = new SuggestedAction(); suggestedAction.setText("Save to calendar"); suggestedAction.setPostbackData("postback_data_1234"); suggestedAction.setCreateCalendarEventAction(createCalendarEventAction); // attaching action to a suggestion Suggestion suggestion = new Suggestion(); suggestion.setAction(suggestedAction); suggestions.add(suggestion); // Send simple text message with the suggestion action rbmApiHelper.sendTextMessage( "Hello, world!", "+12223334444", suggestions ); } catch(Exception e) { e.printStackTrace(); }이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
Python
# Reference to RBM Python client helper and messaging object structure from rcs_business_messaging import rbm_service from rcs_business_messaging import messages # Create a calendar event suggested action suggestions = [ messages.CreateCalendarEventAction('Save to Calendar', 'reply:postback_data_1234', '2020-06-30T19:00:00Z', '2020-06-30T20:00:00Z', 'My calendar event', 'Description of the calendar event') ] # Create text message to send to user text_msg = messages.TextMessage('Hello, world!') cluster = messages.MessageCluster().append_message(text_msg) # Append suggestions for the message to send to the user for suggestion in suggestions: cluster.append_suggestion_chip(suggestion) # Send a simple message with suggested action to the device cluster.send_to_msisdn('+12223334444')이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
C#
using Google.Apis.RCSBusinessMessaging.v1.Data; using RCSBusinessMessaging; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); // Create a calendar event action CreateCalendarEventAction calendarEventAction = new CreateCalendarEventAction { Title = "My calendar event", Description = "Description of the calendar event", StartTime = "2020-06-30T19:00:00Z", EndTime = "2020-06-30T20:00:00Z" }; // Attach the calendar event action to a suggested action SuggestedAction suggestedAction = new SuggestedAction { CreateCalendarEventAction = calendarEventAction, Text = "Save to calendar", PostbackData = "postback_data_1234" }; // Attach the action to a suggestion object Suggestion suggestion = new Suggestion { Action = suggestedAction }; List<Suggestion> suggestions = new List<Suggestion> { suggestion }; rbmApiHelper.SendTextMessage( "Hello, world!", "+12223334444", suggestions );이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
메일 작성
Compose 작업은 사용자가 사전 정의된 전화번호(예: 고객 지원 번호)로 메시지를 보낼 수 있도록 사용자의 메시지 앱을 엽니다.
Compose 작업에는 세 가지 유형이 있습니다. 시각적 예시는 텍스트, 오디오 또는 동영상 메시지 작성하기를 참고하세요.
- 문자 메시지 작성: 사용자가 보낼 수 있는 사전 입력된 텍스트가 있는 메시지 앱을 엽니다.
- 오디오 메시지 작성: 메시지 앱을 열고 사용자가 오디오를 녹음할 수 있도록 마이크를 실행합니다.
- 동영상 메시지 작성: 메시지 앱을 열고 카메라를 실행하여 사용자가 동영상을 녹화할 수 있도록 합니다.
예
다음 코드는 Compose 작업을 전송합니다. 형식 지정 및 값 옵션은 ComposeAction
를 참고하세요.
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentMessages?messageId=MESSAGE_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d "{ 'contentMessage': { 'text': 'Hello, world!', 'suggestions': [ { 'action': { 'text': 'Compose a text message', 'postbackData': 'postback_data_123', 'composeAction': { 'composeTextMessage': { 'phoneNumber': '+15556667777' 'text': 'Draft to go into the send message text field.' } } } },{ 'action': { 'text': 'Compose an audio message', 'postbackData': 'postback_data_456', 'composeAction': { 'composeRecordingMessage': { 'phoneNumber': '+15556667777' 'type': 'ACTION_TYPE_AUDIO' } } } },{ 'action': { 'text': 'Compose a video message', 'postbackData': 'postback_data_789', 'composeAction': { 'composeRecordingMessage': { 'phoneNumber': '+15556667777' 'type': 'ACTION_TYPE_VIDEO' } } } } ] } }"
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); // Define a compose suggested action let suggestions = [ { action: { text: 'Compose a text message', postbackData: 'postback_data_123', 'composeAction': { 'composeTextMessage': { 'phoneNumber': '+15556667777' 'text': 'Draft to go into the send message text field.' } } } },{ action: { text: 'Compose an audio message', postbackData: 'postback_data_456', 'composeAction': { 'composeRecordingMessage': { 'phoneNumber': '+15556667777' 'type': 'ACTION_TYPE_AUDIO' } } } },{ action: { text: 'Compose a video message', postbackData: 'postback_data_789', 'composeAction': { 'composeRecordingMessage': { 'phoneNumber': '+15556667777' 'type': 'ACTION_TYPE_VIDEO' } } } } ]; let params = { messageText: 'Hello, world!', msisdn: '+12223334444', suggestions: suggestions, }; // Send a simple message with a dial suggested action rbmApiHelper.sendMessage(params, function(response) { console.log(response); });
자바
import com.google.api.services.rcsbusinessmessaging.v1.model.ComposeAction; import com.google.api.services.rcsbusinessmessaging.v1.model.ComposeRecordingMessage; import com.google.api.services.rcsbusinessmessaging.v1.model.ComposeTextMessage; import com.google.api.services.rcsbusinessmessaging.v1.model.SuggestedAction; import com.google.api.services.rcsbusinessmessaging.v1.model.Suggestion; import com.google.rbm.RbmApiHelper; … try { // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); // Create suggestions for chip list List<Suggestion> suggestions = new ArrayList<Suggestion>(); // creating compose text suggested action Suggestion composeTextSuggestion = getComposeTextAction() suggestions.add(composeTextSuggestion); // creating compose audio suggested action Suggestion composeAudioSuggestion = getComposeAudioAction() suggestions.add(composeAudioSuggestion); // Send simple text message with the suggestion action rbmApiHelper.sendTextMessage( "Hello, world!", "+12223334444", suggestions ); } catch(Exception e) { e.printStackTrace(); } /** * Creates a compose text suggested action. * @return A suggestion object for a compose text action. */ private Suggestion getComposeTextAction() { // creating a compose text suggested action ComposeTextMessage message = new ComposeTextMessage(); message.setPhoneNumber("+12223334444"); message.setText("Draft to go into the send message text field."); ComposeAction composeAction = new ComposeAction(); composeAction.setComposeTextMessage(message); // creating a suggested action based on a compose text action SuggestedAction suggestedAction = new SuggestedAction(); suggestedAction.setText("Send a text message"); suggestedAction.setPostbackData("postback_data_123"); suggestedAction.setComposeAction(composeAction); // attaching action to a suggestion Suggestion suggestion = new Suggestion(); suggestion.setAction(suggestedAction); return suggestion; } /** * Creates a compose audio suggested action. * @return A suggestion object for a compose audio action. */ private Suggestion getComposeAudioAction() { // creating a compose audio suggested action ComposeRecordingMessage message = new ComposeRecordingMessage(); message.setPhoneNumber("+12223334444"); message.setType("ACTION_TYPE_AUDIO"); ComposeAction composeAction = new ComposeAction(); composeAction.setComposeRecordingMessage(message); // creating a suggested action based on a compose text action SuggestedAction suggestedAction = new SuggestedAction(); suggestedAction.setText("Send an audio message"); suggestedAction.setPostbackData("postback_data_456"); suggestedAction.setComposeAction(composeAction); // attaching action to a suggestion Suggestion suggestion = new Suggestion(); suggestion.setAction(suggestedAction); return suggestion; }
Python
# Reference to RBM Python client helper and messaging object structure from rcs_business_messaging import rbm_service from rcs_business_messaging import messages # Create a dial suggested action suggestions = [ messages.ComposeTextMessageAction( 'Send a text message', 'postback_data_123', '+15556667777', '') messages.ComposeRecordingMessageAction( 'Send an audio message', 'postback_data_456', '+15556667777', 'ACTION_TYPE_AUDIO') ] # Create text message to send to user text_msg = messages.TextMessage('Hello, world!') cluster = messages.MessageCluster().append_message(text_msg) # Append suggestions for the message to send to the user for suggestion in suggestions: cluster.append_suggestion_chip(suggestion) # Send a simple message with suggested action to the device cluster.send_to_msisdn('+12223334444')
C#
using Google.Apis.RCSBusinessMessaging.v1.Data; using RCSBusinessMessaging; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); // Create a compose text suggested action ComposeTextMessage composeTextMessage = new ComposeTextMessage{ PhoneNumber = "+15556667777" Text = "Draft to go into the send message text field." }; ComposeAction composeAction = new ComposeAction { ComposeTextMessage = composeTextMessage }; // Creating a suggested action based on a compose action SuggestedAction suggestedAction = new SuggestedAction { Text = "Send a text message", PostbackData = "postback_data_123", ComposeAction = composeAction }; // Attach action to a suggestion Suggestion suggestion = new Suggestion { Action = suggestedAction }; Listsuggestions = new List { suggestion }; rbmApiHelper.SendTextMessage( "Hello, world!", "+12223334444", suggestions );
추천 칩 목록
상담사는 메시지와 함께 추천 칩 목록을 전송하여 사용자의 후속 작업을 안내합니다. 칩 목록은 연결된 메시지가 대화 하단에 있을 때만 표시됩니다. 대화에서 사용자 또는 상담사가 보낸 후속 메시지는 칩 목록을 덮어씁니다.
칩 목록에는 최대 11개의 추천 칩이 포함되며 각 칩 라벨은 최대 25자(영문 기준)까지 지정할 수 있습니다.
형식 지정 및 값 옵션은 AgentContentMessage
를 참고하세요.
리치 카드
관련 정보, 미디어 또는 추천을 한 번에 전송해야 하는 경우 리치 카드를 전송해야 합니다. 리치 카드를 사용하면 상담사가 단일 메시지로 여러 정보를 전송할 수 있습니다.
리치 카드에는 다음 항목이 포함될 수 있습니다.
- 이미지 또는 동영상
- 제목 텍스트
- 설명 텍스트
- 추천 답장 및 추천 작업 목록 (최대 4개)
리치 카드에는 나열된 항목이 모두 포함될 수 있지만, 카드가 유효하려면 이미지, 동영상 또는 제목이 하나 이상 포함되어야 합니다. 리치 카드에는 최대 4개의 추천 작업 또는 추천 답글이 포함될 수 있습니다. 단일 카드에 추천 작업과 추천 답장의 조합을 포함할 수 없습니다.
상담사는 리치 카드 캐러셀로 여러 리치 카드를 함께 보낼 수 있습니다.
리치 카드 페이로드의 최대 크기는 250KB입니다. 미디어 파일 크기 권장사항 및 제한사항은 권장사항을 참고하세요.
카드 높이
카드는 콘텐츠에 맞게 세로로 확장됩니다. 리치 카드의 최소 높이는 112DP이고 최대 높이는 344DP입니다. 카드의 콘텐츠가 최소 카드 높이를 채우기에 충분하지 않으면 카드가 확장되고 추가 높이가 공백으로 채워집니다.
리치 카드의 미디어는 다음 세 가지 높이 중 하나여야 합니다.
- Shorts: 112 DP
- 중형: 168 DP
- 세로: 264 DP
선택한 높이를 고려할 때 미디어가 카드 내 크기에 맞지 않으면 미디어를 확대/축소하고 자르면서 미디어 미리보기가 선택됩니다.
예
다음 코드는 이미지와 추천 답변이 포함된 리치 카드를 전송합니다. 형식 지정 및 값 옵션은 RichCard
를 참고하세요.
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentMessages?messageId=MESSAGE_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d "{ 'contentMessage': { 'richCard': { 'standaloneCard': { 'thumbnailImageAlignment': 'RIGHT', 'cardOrientation': 'VERTICAL', 'cardContent': { 'title': 'Hello, world!', 'description': 'RBM is awesome!', 'media': { 'height': 'TALL', 'contentInfo':{ 'fileUrl': 'http://www.google.com/logos/doodles/2015/googles-new-logo-5078286822539264.3-hp2x.gif', 'forceRefresh': 'false' } }, 'suggestions': [ { 'reply': { 'text': 'Suggestion #1', 'postbackData': 'suggestion_1' } }, { 'reply': { 'text': 'Suggestion #2', 'postbackData': 'suggestion_2' } } ] } } } } }"
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); // Suggested replies to be used in the card let suggestions = [ { reply: { 'text': 'Suggestion #1', 'postbackData': 'suggestion_1', }, }, { reply: { 'text': 'Suggestion #2', 'postbackData': 'suggestion_2', }, }, ]; // Image to be displayed by the card let imageUrl = 'http://www.google.com/logos/doodles/2015/googles-new-logo-5078286822539264.3-hp2x.gif'; // Definition of the card parameters let params = { messageText: 'Hello, world!', messageDescription: 'RBM is awesome!', msisdn: '+12223334444', suggestions: suggestions, imageUrl: imageUrl, height: 'TALL', }; // Send rich card to device rbmApiHelper.sendRichCard(params, function(response) { console.log(response); });이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
자바
import com.google.api.services.rcsbusinessmessaging.v1.model.StandaloneCard; import com.google.api.services.rcsbusinessmessaging.v1.model.Suggestion; import com.google.rbm.cards.CardOrientation; import com.google.rbm.cards.MediaHeight; import com.google.rbm.RbmApiHelper; import com.google.rbm.SuggestionHelper; … try { // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); // Create suggestions for chip list List<Suggestion> suggestions = new ArrayList<Suggestion>(); suggestions.add( new SuggestionHelper("Suggestion #1", "suggestion_1").getSuggestedReply()); suggestions.add( new SuggestionHelper("Suggestion #2", "suggestion_2").getSuggestedReply()); String imageUrl = "http://www.google.com/logos/doodles/2015/googles-new-logo-5078286822539264.3-hp2x.gif"; // Create a standalone rich card to send to the user StandaloneCard standaloneCard = rbmApiHelper.createStandaloneCard( "Hello, world!", "RBM is awesome!", imageUrl, MediaHeight.MEDIUM, CardOrientation.VERTICAL, suggestions ); rbmApiHelper.sendStandaloneCard(standaloneCard, "+12223334444"); } catch(Exception e) { e.printStackTrace(); }이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
Python
# Reference to RBM Python client helper and messaging object structure from rcs_business_messaging import rbm_service from rcs_business_messaging import messages # Suggested replies to be used in the card suggestions = [ messages.SuggestedReply('Suggestion #1', 'reply:suggestion_1'), messages.SuggestedReply('Suggestion #2', 'reply:suggestion_2') ] # Image to be displayed by the card image_url = 'http://www.google.com/logos/doodles/2015/googles-new-logo-5078286822539264.3-hp2x.gif'; # Define rich card structure rich_card = messages.StandaloneCard('VERTICAL', 'Hello, world!', 'RBM is awesome!', suggestions, image_url, None, None, 'MEDIUM') # Append rich card and send to the user cluster = messages.MessageCluster().append_message(rich_card) cluster.send_to_msisdn('+12223334444')이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
C#
using Google.Apis.RCSBusinessMessaging.v1.Data; using RCSBusinessMessaging; using RCSBusinessMessaging.Cards; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); List<Suggestion> suggestions = new List<Suggestion> { // Create suggestion chips new SuggestionHelper("Suggestion #1", "suggestion_1").SuggestedReply(), new SuggestionHelper("Suggestion #2", "suggestion_2").SuggestedReply() }; string imageUrl = "http://www.google.com/logos/doodles/2015/googles-new-logo-5078286822539264.3-hp2x.gif"; // Create rich card with suggestions StandaloneCard standaloneCard = rbmApiHelper.CreateStandaloneCard( "Hello, world!", "RBM is awesome", imageUrl, MediaHeight.TALL, CardOrientation.VERTICAL, suggestions ); // Send rich card to user rbmApiHelper.SendStandaloneCard(standaloneCard, "+12223334444");이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
리치 카드 캐러셀
사용자에게 선택할 수 있는 여러 옵션을 표시해야 하는 경우 리치 카드 캐러셀을 사용하세요. 캐러셀은 여러 리치 카드를 연결하여 사용자가 상품을 비교하고 개별적으로 반응할 수 있도록 합니다.
캐러셀에는 리치 카드가 최소 2개, 최대 10개까지 포함될 수 있습니다. 캐러셀 내의 리치 카드는 콘텐츠 및 높이에 관한 일반적인 리치 카드 요구사항을 준수해야 합니다.
리치 카드 캐러셀 페이로드의 최대 크기는 250KB입니다. 미디어 파일 크기 권장사항 및 제한사항은 권장사항을 참고하세요.
자르기
리치 카드와 마찬가지로 화면 해상도, 픽셀 밀도, 사용자 환경설정 등 여러 요소가 최종 사용자에게 카드가 표시되는 방식에 영향을 미칩니다. 하지만 캐러셀에서는 처음 몇 개의 카드의 높이가 캐러셀의 모든 카드의 높이를 정의하며 카드 높이는 제목, 설명, 추천 자르기에 영향을 미칩니다.
디스플레이 제약 조건 또는 카드 높이로 인해 기기에서 카드의 모든 요소를 표시할 수 없는 경우 RBM은 다음 로직을 사용하여 기기에 표시될 때까지 카드를 자릅니다.
- 설명을 한 줄로 줄입니다.
- 제목을 한 줄로 줄입니다.
- 정의된 목록의 끝부터 카드에 맞지 않는 추천을 생략합니다.
- 설명은 생략합니다.
- 제목은 생략합니다.
제목과 설명이 잘리지 않도록 최대한 짧게 유지하세요. 세로 모드 미디어의 경우 제목과 설명 또는 추천 1개를 사용합니다. 미디엄 미디어의 경우 추천을 최대 2개까지 사용합니다. 짧은 미디어의 경우 추천을 최대 3개까지 사용합니다. 추천 4개를 표시하려면 카드에 미디어를 포함하지 마세요.
카드의 콘텐츠 크기와 길이를 대략적으로 동일하게 유지하고 필요한 경우 다음 카드가 잘리지 않도록 캐러셀에 더 큰 카드를 먼저 로드합니다.
예
다음 코드는 리치 카드 캐러셀을 전송합니다. 형식 지정 및 값 옵션은 RichCard
를 참고하세요.
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentMessages?messageId=MESSAGE_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d "{ 'contentMessage': { 'richCard': { 'carouselCard': { 'cardWidth':'MEDIUM', 'cardContents': [ { 'title':'Card #1', 'description':'The description for card #1', 'suggestions': [ { 'reply': { 'text':'Card #1', 'postbackData':'card_1' } } ], 'media': { 'height':'MEDIUM', 'contentInfo': { 'fileUrl':'https://storage.googleapis.com/kitchen-sink-sample-images/cute-dog.jpg', 'forceRefresh':'false' } } }, { 'title':'Card #2', 'description':'The description for card #2', 'suggestions': [ { 'reply': { 'text':'Card #2', 'postbackData':'card_2' } } ], 'media': { 'height':'MEDIUM', 'contentInfo': { 'fileUrl':'https://storage.googleapis.com/kitchen-sink-sample-images/elephant.jpg', 'forceRefresh': 'false' } } } ] } } } }"
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); // Images for the carousel cards let card1Image = 'https://storage.googleapis.com/kitchen-sink-sample-images/cute-dog.jpg'; let card2Image = 'https://storage.googleapis.com/kitchen-sink-sample-images/elephant.jpg'; // Define the card contents for a carousel with two cards, each with one suggested reply let cardContents = [ { title: 'Card #1', description: 'The description for card #1', suggestions: [ { reply: { text: 'Card #1', postbackData: 'card_1', } } ], media: { height: 'MEDIUM', contentInfo: { fileUrl: card1Image, forceRefresh: false, }, }, }, { title: 'Card #2', description: 'The description for card #2', suggestions: [ { reply: { text: 'Card #2', postbackData: 'card_2', } } ], media: { height: 'MEDIUM', contentInfo: { fileUrl: card2Image, forceRefresh: false, }, }, }, ]; // Definition of carousel card let params = { msisdn: '+12223334444', cardContents: cardContents, }; // Send the device the carousel card defined above rbmApiHelper.sendCarouselCard(params, function(response) { console.log(response); });이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
자바
import com.google.api.services.rcsbusinessmessaging.v1.model.CardContent; import com.google.api.services.rcsbusinessmessaging.v1.model.Suggestion; import com.google.rbm.cards.CardOrientation; import com.google.rbm.cards.CardWidth; import com.google.rbm.cards.MediaHeight; import com.google.rbm.RbmApiHelper; import com.google.rbm.SuggestionHelper; … try { // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); List cardContents = new ArrayList(); // Images for the carousel cards String card1Image = "https://storage.googleapis.com/kitchen-sink-sample-images/cute-dog.jpg"; // Create suggestions for first carousel card List card1Suggestions = new ArrayList(); card1Suggestions.add( new SuggestionHelper("Card #1", "card_1")); cardContents.add( new StandaloneCardHelper( "Card #1", "The description for card #1", card1Image, card1Suggestions) .getCardContent(MediaHeight.SHORT) ); // Images for the carousel cards String card2Image = "https://storage.googleapis.com/kitchen-sink-sample-images/elephant.jpg"; // Create suggestions for second carousel card List card2Suggestions = new ArrayList(); card2Suggestions.add( new SuggestionHelper("Card #2", "card_2")); cardContents.add( new StandaloneCardHelper( "Card #2", "The description for card #2", card2Image, card2Suggestions) .getCardContent(MediaHeight.SHORT) ); // Send the carousel to the user rbmApiHelper.sendCarouselCards(cardContents, CardWidth.MEDIUM, "+12223334444"); } catch(Exception e) { e.printStackTrace(); }이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
Python
# Reference to RBM Python client helper and messaging object structure from rcs_business_messaging import rbm_service from rcs_business_messaging import messages # Images for the carousel cards card_image_1 = 'https://storage.googleapis.com/kitchen-sink-sample-images/cute-dog.jpg'; card_image_2 = 'https://storage.googleapis.com/kitchen-sink-sample-images/elephant.jpg'; # Suggested replies to be used in the cards suggestions1 = [ messages.SuggestedReply('Card #1', 'reply:card_1') ] suggestions2 = [ messages.SuggestedReply('Card #2', 'reply:card_2') ] # Define the card contents for a carousel with two cards, # each with one suggested reply card_contents = [] card_contents.append(messages.CardContent('Card #1', 'The description for card #1', card_image_1, 'MEDIUM', suggestions1)) card_contents.append(messages.CardContent('Card #2', 'The description for card #2', card_image_2, 'MEDIUM', suggestions2)) # Send the device the carousel card defined above carousel_card = messages.CarouselCard('MEDIUM', card_contents) cluster = messages.MessageCluster().append_message(carousel_card) cluster.send_to_msisdn('+12223334444')이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.
C#
using Google.Apis.RCSBusinessMessaging.v1.Data; using RCSBusinessMessaging; using RCSBusinessMessaging.Cards; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); // Image references to be used in the carousel cards string card1Image = "https://storage.googleapis.com/kitchen-sink-sample-images/cute-dog.jpg"; string card2Image = "https://storage.googleapis.com/kitchen-sink-sample-images/elephant.jpg"; // Suggestion chip lists to be used in carousel cards List<Suggestion> suggestions1 = new List<Suggestion> { new SuggestionHelper("Card #1", "card_1").SuggestedReply() }; List<Suggestion> suggestions2 = new List<Suggestion> { new SuggestionHelper("Card #2", "card_2").SuggestedReply() }; // Create the card content for the carousel List<CardContent> cardContents = new List<CardContent> { // Add items as card content new StandaloneCardHelper( "Card #1", "The description for card #1", card1Image, suggestions1).GetCardContent(), new StandaloneCardHelper( "Card #2", "The description for card #2", card2Image, suggestions2).GetCardContent() }; // Send the carousel to the user rbmApiHelper.SendCarouselCards(cardContents, CardWidth.MEDIUM, msisdn);이 코드는 RBM 샘플 에이전트에서 발췌한 것입니다.