Ich versuche eine SMS über Apache Camel mit der camel-twilio
component zu senden. Da ich die Twilio API nie benutzt habe (weder nativ noch mit Apache Camel), bin ich mir nicht sicher, ob ich die Parameter richtig verstanden habe. Hier ist die Methode, die ich schrieb:Apache Camel: Sende Textnachricht mit Twilio
/**
* Sends a text message to the given recipient's number (parameter to)
*
* @param username:
* Twilio username (email)
* @param password:
* Twilio password (in plain text)
* @param accountSid:
* Twilio account sid (from the dashboard)
* @param from:
* registered phone number (starting with country prefix +XX)
* @param to:
* the recipient's phone number (starting with country prefix +XX)
* @param message:
* the message to be sent (plain text)
* @throws Exception
*/
public static void sendTextMessage(String username, String password, String accountSid, String from, String to,
String message) throws Exception {
String route = String.format("twilio:message/creator?username=%s&password=%s&accountSid=%s&from=%s&to=%s",
username, password, accountSid, from, to);
CamelContext context = new DefaultCamelContext();
context.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:message").to(route);
}
});
context.start();
ProducerTemplate producer = context.createProducerTemplate();
producer.sendBody("direct:message", message);
context.stop();
}
Die wichtigste Zeile ist die Erstellung der Route, die erste der Methode. Wenn ich diese Methode renne mit Parametern der JavaDoc nach, bekomme ich diesen Fehler:
Caused by: org.apache.camel.RuntimeCamelException: Missing properties for creator, need one or more from [pathAccountSid, mediaUrl, messagingServiceSid, body]
Also dachte ich, den Parameter messagingServiceSid
, hinzufügen meine accountSid
wieder Bereitstellung:
String route = String.format("twilio:message/creator?username=%s&password=%s&accountSid=%s&from=%s&to=%s&messagingServiceSid=%s",
username, password, accountSid, from, to, accountSid);
Jetzt bekomme ich Diese Fehlermeldung:
Caused by: java.lang.IllegalArgumentException: No matching method for message/creator, with arguments [messagingServiceSid, from, to]
Was mache ich falsch?
EDIT: Das sind meine Maven Abhängigkeiten:
<dependencies>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core</artifactId>
<version>2.20.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-twilio</artifactId>
<version>2.20.1</version>
</dependency>
</dependencies>
EDIT 2: Die hier geändert und Arbeitsversion des Verfahrens:
/**
* Sends a text message to the given recipient's number (parameter to)
*
* @param accountSid:
* Twilio account sid (from the dashboard)
* @param authToken:
* Twilio auth token (from the dashboard)
* @param from:
* registered phone number (starting with country prefix +XX)
* @param to:
* the recipient's phone number (starting with country prefix +XX)
* @param message:
* the message to be sent (plain text)
* @throws Exception
*/
public static void sendTextMessage(String accountSid, String authToken, String from, String to, String message)
throws Exception {
CamelContext context = new DefaultCamelContext();
TwilioComponent twilio = context.getComponent("twilio", TwilioComponent.class);
twilio.getConfiguration().setUsername(accountSid);
twilio.getConfiguration().setPassword(authToken);
context.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:message")
.setHeader("CamelTwilioTo", constant(new PhoneNumber(to)))
.setHeader("CamelTwilioFrom", constant(new PhoneNumber(from)))
.setHeader("CamelTwilioBody", constant(message))
.to("twilio://message/creator");
}
});
context.start();
ProducerTemplate producer = context.createProducerTemplate();
producer.sendBody("direct:message", message);
context.stop();
}
Wenn ich das Konto sid anstelle des Benutzernamens und der Auth-Token anstelle des Kennworts verwenden, es funktioniert! Ich danke dir sehr! –