Last active
July 15, 2021 07:27
-
-
Save joanmolinas/cb26d543f2c5a9f405d878ced0c8e0de to your computer and use it in GitHub Desktop.
Imbee Transaccionalidad
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ============ IOS ============ | |
// 1. | |
public func messageReceived(message: Message) { | |
guard !message.isSentByMe() else {return} | |
var externalType:String? | |
var externalData: [AnyHashable: Any]? | |
if let externalMessageContent = message.content as? ExternalContent { | |
externalType = externalMessageContent.externalType | |
externalData = externalMessageContent.externalData | |
} | |
// Nuestro wrapper envia via delegate que ha recibido un mensaje. En este listener podeis escuchar todos los mensajes que se reciben en el chatbot. Sea mensaje visual o transaccional | |
self.voiceBankingDelegate?.messageReceived(messageIdentifier: message.messageId, payload: message.payload, externalType: externalType, externalData: externalData) | |
} | |
// 2. | |
public func messageReceived(messageIdentifier: String, payload: String?, externalType: String?, externalData: [AnyHashable : Any]?) { | |
// AUTH_TOKEN Indica que es mensaje transaccional | |
struct MessagesTypes { | |
static let AUTH_TOKEN = "get_authcode" | |
} | |
if externalType == CBTVoiceBankingViewModel.MessagesTypes.AUTH_TOKEN { | |
// Aquí realizamos la acción de obtener el token, una vez se obtiene hay que mandar un mensaje invisible con ese payload. Un ejemplo de como lo tenemos nosotros | |
} | |
} | |
// 3. | |
fileprivate func sendTokenMessage(token: String) { | |
// Aquí ya hemos obtenido el token y mandamos via SDK el token | |
let messageContent = TextContent() | |
messageContent.plainText = " " // Vacío | |
// Mandamos mensaje via SDK. Importante el flag .invisible | |
IMbeeCore.sendContentMessage(message.content, to: conversation, payload: token, withFlags: .invisible) | |
} | |
// ============ FINAL IOS ============ | |
// ============ ANDROID ============ | |
// 1. En el callback onExternalContentReceived llamamos al iMbeeManager: | |
@Override | |
public void onExternalContentReceived(String externalType, String externalData) { | |
iMbeeManager.getChatEventInterface().onReceivedExternalContentMessage(externalType, externalData); | |
} | |
// 2. Allí miramos si es del tipo “get_auth_code”: | |
public void onReceivedExternalContentMessage(String externalContentType, String externalData) { | |
if (ChatBotConstants.EXTERNAL_CONTENT_AUTH_CODE.equalsIgnoreCase(externalContentType)) { | |
requestAuthCode(); | |
} | |
} | |
// 3. Y llmamamos a la función que recupera el getAuthCoce de la app y lo devolvemos con la función sendAuthCode. | |
public void requestAuthCode() { | |
// Aquí realizamos la acción de obtener el token, una vez se obtiene hay que mandar un mensaje invisible con ese payload. Un ejemplo de como lo tenemos nosotros | |
} | |
// 4. Y lo enviamos de vuelta al backend: | |
private void sendAuthCode(@Nullable AuthCodeObject authCodeObject) { | |
if (authCodeObject != null) { | |
String message = VoiceBankingUtils.getPostBackStringFromObject(ChatBotConstants.AUTHCODE_POSTBACK, authCodeObject); | |
sendInvisibleMessage(message, null); | |
} | |
} | |
// ============ FINAL ANDROID ============ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment