Affichage des résultats 1 à 10 sur 10

Discussion: Difficultées avec Asterisk AMI

  1. #1
    Membre Junior
    Date d'inscription
    juin 2011
    Messages
    5
    Downloads
    1
    Uploads
    0

    Difficultées avec Asterisk AMI

    Bonjour à tous!

    Alors, comme l'explique le titre du sujet, je rencontre quelques difficulté avec Asterisk manager API.
    Mon but est simple, un système Click2Dial, j'ai bien trouvé des exemples, mais je n'arrive à rien depuis 4 jours à pleins de temps maintenant.

    J'ai écrit une fonction de test, toute bête, pour trouver une solution, mais rien.
    J'ajoute que j'ai installé AsteriskNow 1.6 sur une machine virtuelle, et que j'utilise X-Lite pour les tests.
    Le paramétrage d'Asterisk m'a l'air bon, (tout fonctionne comme je le souhaite lorsque je teste avec plusieurs sessions lancées sur X-Lite), mais je n'arrive pas à reproduire tout ça en java.

    Voici donc ma classe de test, n’hésitez pas à m'engueuler si vous voyez des aberrations!

    Merci d'avance à vous!

    Code:
    import java.io.IOException;
    
    import junit.framework.TestCase;
    
    import org.asteriskjava.live.AsteriskChannel;
    import org.asteriskjava.live.AsteriskQueueEntry;
    import org.asteriskjava.live.AsteriskServerListener;
    import org.asteriskjava.live.DefaultAsteriskServer;
    import org.asteriskjava.live.MeetMeUser;
    import org.asteriskjava.live.internal.AsteriskAgentImpl;
    import org.asteriskjava.manager.TimeoutException;
    import org.asteriskjava.manager.action.QueueAddAction;
    import org.asteriskjava.manager.response.ManagerResponse;
    
    
    
    @SuppressWarnings("deprecation")
    public class TestConnexion extends TestCase implements AsteriskServerListener {
    
    	public void testConnexion() throws IllegalArgumentException, IllegalStateException, IOException, TimeoutException {
    		DefaultAsteriskServer server = new DefaultAsteriskServer("192.168.0.35", "root", "root");
    		server.addAsteriskServerListener(this);
    		
    		QueueAddAction action = new QueueAddAction();
            action.setMemberName("Test");
            action.setQueue("simple-queue");
            action.setInterface("SIP/Test");
            action.setStateInterface("SIP/AutreTest");
            action.setPaused(false);
    		
    		/* Deprecated --> Message d'erreur si j'utilise cette action (Unknown command)
    		AgentCallbackLoginAction action = new AgentCallbackLoginAction();
            action.setAckCall(true);
            action.setAgent("SIP/Test");
            action.setExten("AutreTest");
            */
    		
    		ManagerResponse reponse = server.getManagerConnection().sendAction(action,15000);
            System.out.println("Login Response:" + reponse.getResponse());
            System.out.println("Login Message:" + reponse.getMessage());
    		
    	
    	}
    
    	@Override
    	public void onNewAgent(AsteriskAgentImpl arg0) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void onNewAsteriskChannel(AsteriskChannel arg0) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void onNewMeetMeUser(MeetMeUser arg0) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void onNewQueueEntry(AsteriskQueueEntry arg0) {
    		// TODO Auto-generated method stub
    		
    	}
    }

  2. #2
    Membre Association
    Date d'inscription
    septembre 2010
    Messages
    1 236
    Downloads
    0
    Uploads
    0
    En telnet manuellement ça passe bien ?

  3. #3
    Membre Junior
    Date d'inscription
    juin 2011
    Messages
    5
    Downloads
    1
    Uploads
    0
    Citation Envoyé par Reaper Voir le message
    En telnet manuellement ça passe bien ?
    Quelles instructions je dois rentrer pour tester une fois que je suis loggé dessus?

  4. #4
    Membre Association
    Date d'inscription
    septembre 2010
    Messages
    1 236
    Downloads
    0
    Uploads
    0
    Originate par exemple.

  5. #5
    Membre Junior
    Date d'inscription
    juin 2011
    Messages
    5
    Downloads
    1
    Uploads
    0
    Je n'y arrive pas avec telnet.

    Pas forcement parce que cela ne marche pas, surtout parce que je n'ai pas l'habitude de l'utilisé.
    Que dois tapé exactement une fois que je suis connecté en telnet?

    En tout cas merci beaucoup de m'avoir répondu si vite!

  6. #6
    Membre Association
    Date d'inscription
    septembre 2010
    Messages
    1 236
    Downloads
    0
    Uploads
    0

  7. #7
    Membre Junior
    Date d'inscription
    juin 2011
    Messages
    5
    Downloads
    1
    Uploads
    0
    Je le connaît bien ce lien, je suis dessus depuis 4 jours de 8h à 4h du matin!

    Le problème venait tout simplement de moi, car dans tous les exemple, les instruction sont séparé par un saut de ligne, qui ne s'affiche pas sur ma console, ça m'a déstabilisé!

    Donc la réponse est: avec telnet je peux très bien envoyer la commande!

    Mais l'envoi d'une action originate, j'ai réussi en java avec le Manager API.

    Mais mon but, et autant pour moi c'est vrai que j'ai peut être pas été très clair, est de faire un applet JAVA. Depuis cette applet, je sélectionne un contact et je l'appel. Un Click2Call.
    Ce que je ne comprends pas, c'est comment récupérer la communication depuis mon applet. Parce qu'en faisant comme ça, Asterisk va appeler le destinataire, mais il faut évidemment que l'appelant puisse communiquer avec lui, et c'est cette dernière partie que je n'arrive pas à résoudre.

    Donc je ne sais pas si c'est simplement que je n’envoie pas la bonne action, ou autre chose.

  8. #8
    Membre Association
    Date d'inscription
    septembre 2010
    Messages
    1 236
    Downloads
    0
    Uploads
    0
    Je vais te donner l'exemple d'une bonne action pour asterisk 1.6



    Exemple en ruby:

    testcall.rb

    require 'socket'

    STDOUT.flush
    s = TCPsocket.open('localhost', 5038)

    seq = [
    "Action: Login",
    "Username: contactlist",
    "Secret: contactSdjgsD6",
    "",
    "Action: Originate",
    "Channel: SIP/SOFTPHONE001", #DEVICE de l'appelant
    "Context: trunktollfree", #Contexte avec le bon plan de numérotation
    "Exten: 33557023597", #DESTINATION
    "Priority: 1",
    "Callerid: Dupond <3355706456>", #PRESENTATION DE NUMERO
    "",
    "Action: Logoff"
    ""
    ""
    ]

    seq.each{ |c| s.puts "#{c}\r\n" }

    while line = s.gets # Read lines from the socket
    puts line.chop # And print with platform line terminator
    end

  9. #9
    Membre Junior
    Date d'inscription
    juin 2011
    Messages
    5
    Downloads
    1
    Uploads
    0
    Oui merci beaucoup Reaper, mais j'ai bien saisi comment lancer une action.

    Le problème en lançant une action originate, c'est que ça va d'abord faire sonner l'appelant, puis une fois qu'il a décrocher, faire sonner l'appelé.

    Maintenant, mon but est d’établir directement la communication avec l'appelant, et de faire sonner l'appeler, mais c'est aussi de rester à l'écoute d'Asterisk si jamais quelqu'un m'appel, et dans ce cas, la, soit l'action originate n'est pas ce que je veux, soit il ne faut pas que j'utilise cette API, soit je ne fais pas faire!
    Dans tout les cas, j'aimerais un petit peu d'aide!

  10. #10
    Membre Association
    Date d'inscription
    septembre 2010
    Messages
    1 236
    Downloads
    0
    Uploads
    0
    C'est quoi le souci ? Utilise originate pour initier un appel, sinon parse EVENT si quelqu’un t’appelle, ta mis 4 messages pour finalement d’écrire ce que tu veux. Pas la peine de mettre les classes nous pouvons t'aider seulement coté asterisk.

Les tags pour cette discussion

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •