Skip to content

Instantly share code, notes, and snippets.

@joanmolinas
Last active July 15, 2021 07:27
Show Gist options
  • Save joanmolinas/cb26d543f2c5a9f405d878ced0c8e0de to your computer and use it in GitHub Desktop.
Save joanmolinas/cb26d543f2c5a9f405d878ced0c8e0de to your computer and use it in GitHub Desktop.
Imbee Transaccionalidad
// ============ 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