FOP2 with agents

  1. 15 years ago

    I have 200 users which are set up as agents using AgentCallBackLogin etc to enable hotdesking. With FOP1 i was able to use the same config but simply have

    [Agent/496]
    extension=496

    instead of

    [SIP/496]
    extension=496

    and everything worked fine. This doesn't seem to work with FOP2.

    Am i missing something really simple?
    Thanks
    Court

  2. admin

    20 Nov 2009 Administrator

    Try with:

    [SIP/496]
    extension=496
    context=locationFORagentCALLBACKlogin

    You have to fill the context and extension with the ones that show as Location when you do a "show agents"

    Best regards,

  3. Hi Nic,

    Sorry my complete button config is:

    [Agent/510]
    type=extension
    extension=510
    voicemailext=*510@fop
    channel=Agent/510
    context=fop
    mailbox=510
    label=Courtenay Greig 510

    It displays, but when i make a call, it shows no change, however if someone rings me, Line one changes to show the new info, the the colour doesnt go red and the little LED remains unchanged. Its like its only getting half the info....

    Is the above config correct?

    Thanks Court

  4. Can anybody help me with this?

    Thanks
    Court

  5. admin

    30 Nov 2009 Administrator

    Hi Court,

    You did not post the output of "show agents". As I said, the channel name is not that important. The important part is the LOCATION for the agent that needs to match extension & context in fop's button config.

    You can have something like

    [SIP/itdoesnotmatter]
    type=extension
    extension=100
    context=agent

    Agent channels are not trackable "all the way", as they are proxy channels. FOP will try to track them, but you cannot track an outgoing call without knowing the real channel the agent is using.

    So, do a "show agents" in the asterisk cli, look at the Location, and configure a button with the same extension and context you see there... if location is 4302@somecontext, you have to set extension 4302 and context "somecontext" in the button.

    Best regards,

  6. ah sorry ok....

    402 (402 Marcel Brandenburg) available at '1053@agents' (musiconhold is 'default')
    403 (403 Tessa Clarke) available at '1062@agents' (musiconhold is 'default')
    404 (404 Merri Blakemore) available at '1055@agents' (musiconhold is 'default')
    405 (405 Glyn OBrien) available at '1103@agents' (musiconhold is 'default')
    406 (406 Russell Garvey) available at '1037@agents' (musiconhold is 'default')

    so in our environment when people are dynamically logging in and out all day, we would need to rebuild the fop config file each time somebody logs in to reassign the channel to which ever phone they logged into?

    if this is the case, is there any way to issue a 'refresh' to fop2_server, otherwise each time somebody logs in i would have to restart the fop2_server service, and that would cause all clients to disconnect (i assume)

    Many thanks

  7. admin

    30 Nov 2009 Administrator

    You do not need to rebuild fop configs, you need to use the same extension and context as the location for a fop button:

    402 (402 Marcel Brandenburg) available at '1053@agents' (musiconhold is 'default')

    That should be set as:

    [dummy/channel]
    type=extension
    extension=1053
    context=agent

    You should be able to track inbound calls for that agent with no issues.

    Best regards,

  8. 14 years ago

    sorry, i might be really missing something.....but what about the label...today Marcel is logged in, so the label would say 402 Marcel....but tomorrow when John logs in, that same SIP extension button needs to say 410 John....so therefore wouldnt i need to change the label and reload to get it to show names correctly as people log in to different phones?

  9. admin

    3 Dec 2009 Administrator

    Fop2 will change the buton labels to the Agent name or member interface name for dynamic queue members. It will change the label back when they log off.

  10. 13 years ago

    I am having the same problem. I have read this post and still don't understand how this is supposed to work. Clear documentation would be very helpful. Here's what I'm doing and what I need to have happen. I purchased the FOP2 regular basic license as I need 58 buttons to replicate the op_panel-0.30 install that we are replacing as it doesn't support queues and agents correctly now that we upgraded to asterisk 1.6. Previously we were using asterisk 1.4 and op_panel-0.30. This combination was working perfectly. When an agent was not logged in the extension button showed the actual sip phones extension. When the agent logged in via agentcallbacklogin, the extensions label changed from the sip extension number to the agents name, it also shows when the agent is on an inbound call, and when the agent's phone is ringing.

    With the following configurations below, do not really help. The sip button shows when the phone is ringing and when someone is on that phone, however there is no way to know wwhich agent is on that phone. The label always says the sip extension no matter what. Additionally even though the agent is logged in, and the agents name is listed under the queue they are logged into, the agents icon never changes, it always shows ready, it never changes to busy, even though the phone she logged into is busy.

    Agent login dialplan:
    extensions.conf
    exten => 400,1,Answer()
    exten => 400,n,wait(0.5)
    exten => 400,n,read(agent,agent-user)
    exten => 400,n,Authenticate(/agentpw-${agent},d,)
    exten => 400,n,read(ext,agent-newlocation)
    exten => 400,n,GotoIf($["${ext}" = ""]?logout)
    exten => 400,n,GotoIf(${DB_EXISTS(Agent_Ext/${agent})}?move)
    exten => 400,n,Set(DB(Agent_Ext/${agent})=${ext})
    exten => 400,n,AddQueueMember(800,local/${agent}@agent,,,,SIP/${ext})
    exten => 400,n,playback(agent-loginok)
    exten => 400,n,playback(vm-goodbye)
    exten => 400,n,Hangup
    exten => 400,n(move),set($junk=${DB_DELETE(Agent_Ext/${agent})})
    exten => 400,n,RemoveQueueMember(800,local/${agent}@agent)
    exten => 400,n,Set(DB(Agent_Ext/${agent})=${ext})
    exten => 400,n,AddQueueMember(800,local/${agent}@agent,,,,SIP/${ext})
    exten => 400,n,playback(agent-loginok)
    exten => 400,n,playback(vm-goodbye)
    exten => 400,n,Hangup
    exten => 400,n(logout),set($junk=${DB_DELETE(Agent_Ext/${agent})})
    exten => 400,n,RemoveQueueMember(800,local/${agent}@agent)
    exten => 400,n,playback(agent-loggedoff)
    exten => 400,n,playback(vm-goodbye)
    exten => 400,n,hangup

    queues.conf
    [general]
    persistentmembers = yes
    autofill = yes
    monitor-type = MixMonitor
    eventwhencalled = yes

    [800]
    fullname = CSR Agent Queue
    strategy = rrmemory
    timeout = 8
    timeoutreset = yes
    wrapuptime = 20
    autofill = yes
    autopause = no
    maxlen =
    joinempty = yes
    leavewhenempty = no
    reportholdtime = no
    musicclass = csr

    fop2 buttons.cfg
    [SIP/100]
    type=extension
    extension=100
    context=default
    label=100

    [QUEUE/800]
    type=queue
    label=CSR
    extension=800
    context=default

    [QUEUE/805]
    type=queue
    label=Luxe
    extension=805
    context=default

    fop-0.3 buttons.cfg
    [SIP/101]
    Position=2
    Label="CSR 101"
    Extension=101
    Context=default

    [SIP/107]
    Position=n
    Label="CSR 107"
    Extension=107
    Context=default

    [SIP/110]
    Position=n
    Label="CSR 110"
    Extension=110
    Context=default

    [SIP/111]
    Position=n
    Label="CSR 111"
    Extension=111
    Context=default

    ;[SIP/112]
    ;Position=n
    ;Label="CSR 112"
    ;Extension=112
    ;Context=default

    [SIP/113]
    Position=n
    Label="CSR 113"
    Extension=113
    Context=default

    [SIP/114]
    Position=n
    Label="Custom 114"
    Extension=114
    Context=default

    [SIP/115]
    Position=n
    Label="CSR 115"
    Extension=115
    Context=default

    [SIP/116]
    Position=n
    Label="CSR 116"
    Extension=116
    Context=default

    [SIP/118]
    Position=n
    Label="CSR 118"
    Extension=118
    Context=default

    [SIP/121]
    Position=n
    Label="CSR 121"
    Extension=121
    Context=default

    [SIP/127]
    Position=n
    Label="CSR 127"
    Extension=127
    Context=default

    [SIP/131]
    Position=n
    Label="Custom 131"
    Extension=131
    Context=default

    [SIP/138]
    Position=n
    Label="CSR 138"
    Extension=138
    Context=default

    [SIP/142]
    Position=n
    Label="CSR 142"
    Extension=142
    Context=default

    [SIP/149]
    Position=n
    Label="CSR 149"
    Extension=149
    Context=default

    [SIP/150]
    Position=n
    Label="CSR 150"
    Extension=150
    Context=default

    [SIP/152]
    Position=n
    Label="CSR152"
    Extension=152
    Context=default

    [SIP/123]
    Position=n
    Lablel="Custom 123"
    Extension=123
    Context=default

    ;
    ; CSR LuxeBidder lines
    ;
    [SIP/2110]
    Position=22
    Label="CSR 2110"
    Extension=2110
    Context=default

    [SIP/2112]
    Position=n
    Label="CSR 2112"
    Extension=2112
    Context=default

    [SIP/2113]
    Position=n
    Label="CSR 2113"
    Extension=2113
    Context=default

    [SIP/2118]
    Position=n
    Label="CSR 2118"
    Extension=2118
    Context=default

    [SIP/2127]
    Position=n
    Label="CSR 2127"
    Extension=2127
    Context=default

    [SIP/2138]
    Position=n
    Label="CSR 2138"
    Extension=2138
    Context=default

    [SIP/2149]
    Position=n
    Label="CSR 2149"
    Extension=2149
    Context=default

    [QUEUE/800]
    Position=32-49
    Label="CSR Queue"
    Extension=800

    [QUEUE/800]
    Position=50
    Label="CSR Q Summary"
    Extension=800

    [QUEUE/806]
    Position=30
    Label="Custom Q Summary"
    Extension=806

    [QUEUE/805]
    Position=52-69
    Label="Luxe Queue"
    Extension=805

    [QUEUE/805]
    Position=70
    Label="Luxe Q Summary"
    Extension=805

    ; 3rd box
    [rectangle]
    x=708
    y=35
    width=298
    height=550
    line_width=3
    ;line_color=ffff10
    ;fade_color1=ffff10
    ;fade_color2=ffff3F
    line_color=10ff10
    fade_color1=10ff10
    fade_color2=10ff10
    rnd_border=2
    alpha=10
    layer=top ; top = above buttons
    ; bottom = below buttons

    ; 2nd column top row
    ;[rectangle]
    ;x=498
    ;y=35
    ;width=252
    ;height=515
    ;line_width=3
    ;line_color=ff1010
    ;fade_color1=ff1010
    ;fade_color2=a01000
    ;line_color=10ff10
    ;fade_color1=10ff10
    ;fade_color2=10ff10
    ;rnd_border=2
    ;alpha=10
    ;layer=top
    ;panel_context=* ; The item will be persistant across contexts

    ; 2nd column bottom row
    ;[rectangle]
    ;x=498
    ;y=255
    ;width=252
    ;height=295
    ;line_width=3
    ;line_color=10ff10
    ;fade_color1=10ff10
    ;fade_color2=10ff00
    ;rnd_border=2
    ;alpha=20
    ;layer=top

    ; 1st column
    [rectangle]
    x=-1
    y=35
    width=426
    height=550
    line_width=3
    line_color=1010ff
    fade_color1=1010ff
    fade_color2=1010ff
    rnd_border=2
    alpha=10
    layer=top

    ; luxe queue
    ;
    [rectangle]
    x=424
    y=35
    width=283
    height=550
    line_width=3
    line_color=ff3300
    fade_color1=ff3300
    fade_color2=ff3300
    rnd_border=2
    alpha=10
    layer=top

    ; you can include configuration files
    ;
    ;include => more_rectangles.cfg

    ;[LEGEND]
    ;x=800
    ;y=50
    ;text=Zap Lines
    ;font_size=32
    ;font_color=000000
    ;font_family=Times New Roman ; only used when use_embed_fonts=0
    ;use_embed_fonts=1 ; if set to 1 it will use an embeded Arial type font
    ; that looks consistently between platforms/os

    [LEGEND]
    x=430
    y=50
    text=DNL Queue
    font_size=20
    font_color=000000
    font_family=Arial
    use_embed_fonts=1

    [LEGEND]
    x=720
    y=50
    text=Luxe Queue
    font_size=20
    font_color=000000
    font_family=Arial
    use_embed_fonts=1

    ;[LEGEND]
    ;x=555
    ;y=270
    ;text=Queues
    ;font_size=32
    ;font_color=000000
    ;font_family=Arial
    ;use_embed_fonts=1

    [LEGEND]
    ;x=160
    x=10
    y=50
    text=CSR Agents
    font_color=000000
    font_size=20
    font_family=Arial
    use_embed_fonts=1

    [LEGEND]
    x=290
    y=50
    text=Luxe Agents
    font_color=000000
    font_size=20
    font_family=Arial
    use_embed_fonts=1

    [LEGEND]
    x=290
    y=485
    text=Custom Q
    font_color=000000
    font_size=20
    font_family=Arial
    use_embed_fonts=1

    ;[LEGEND]
    ;x=75
    ;y=75
    ;text=Local
    ;font_size=24
    ;font_family=Arial
    ;font_color=000000
    ;use_embed_fonts=1

    ;[LEGEND]
    ;x=315
    ;y=75
    ;text=Remote
    ;font_color=000000
    ;font_size=24
    ;font_family=Arial
    ;use_embed_fonts=1

    *** AGENT LOGGED ON ***
    localhost*CLI> queue show 800
    800 has 0 calls (max unlimited) in 'rrmemory' strategy (1s holdtime, 0s talktime), W:0, C:1, A:0, SL:0.0% within 0s
    Members:
    local/1149@agent (dynamic) (Not in use) has taken no calls yet
    No Callers

    localhost*CLI> database show
    /Agent_Ext/1149 : 100
    /Queue/PersistentMembers/800 : local/1149@agent;0;0;local/1149@agent;SIP/100

  11. admin

    3 Mar 2011 Administrator

    Hello,

    We tried to make the documentation as clear as possible. It is also nice to have clear and precise questions so we can reply accordingly.

    FOP2 will work correctly for any type of queue member type and login method, either if you use 1.4 deprecated agentcallbacklogin (where it will behave similar to fop1, changing the button label to the agent name, but not the led color).

    If you are using 1.6 now there is no more agentcallbacklogin, but you have the option to add queue members dynamically and use the membername parameter. If there is a local queue member logged into any queue, using the membername option, and you have a button in fop2 that matches the extension@context of that local queue member, the button will change the label to the membername when added, and back to the regular button label when removed.

    There is nothing to do on your part, there are no special settings. If the dialplan in asterisk uses those functions and parameters I mention, and your fop2 buttons are configured correctly, it will just work. The dialplan you pasted is not using the queue member name, so not sure where do you expect fop2 to find out about it. You can do something like:

    exten => 400,n,AddQueueMember(800,local/${agent}@agent,,,MY FANCY AGENT NAME,SIP/${ext})

    Replace the agent name with whatever you like, perhaps that agent number, or maybe you have some DB entries mapping the agent number to their real name... etc. The member name is also important for queue_log statistics, is what we have now that agentcallbacklogin was deprecated.

    best regards,

  12. Thanks for the response. I did figure out that putting a fancy name in the addqueuemember line makes a nice name show up under the queue rather than the agent technical name. That's very cool and will make the boss very happy.

    Unfortunately either I didn't do a good job at relaying my "real" need, or I'm too stupid to understand this concept... Sorry..

    So what do you mean by "matches extension@context of that local queue member"? My understanding of this would be to have a button that says 1149@agents. Then when the user that logs into queue 800 as agent 1149 (which would login with device local/1149@agents). That button would show [1149@agents] when the user is not logged in and [agent fancy name] when the agent is logged in.

    Which is not really what I'm going for.

    I want to have a button that monitors SIP/100. So the hardware phone that registers as 100 would be the location the button is monitoring. So the button would show [SIP/100] (or whatever the label is for that button) when there is no one logged into the queue, but when an agent sits down at that phone and logs into the queue using the agent device local/1149@agents, the button would change from SIP/100 to the fancy name of the agent that logged into the queue.

    Thank you for your time! :-)
    Cheers!
    Greg

  13. I got it! Maybe this will clarify what I'm looking to do. How do I make this button:

    [SIP/100]
    type=extension
    label=Ext 100
    extension=100
    context=default

    Change the label from "Ext 100" to "Rachel" when I do this in the dialplan:

    exten => 400,n,AddQueueMember(800,local/1149@agent,,,Rachel,SIP/100)

    Does that help?

    Thanks! Awesome App! The boss is really liking it and can't wait for me to get this last item finished!
    Greg

  14. While still working on this issue I noticed that I was running FOP2 2.11. Since many of the forum posts point towards 2.2 being the answer, I downloaded the new version, and upgraded. This has not resolved this problem (it actually caused more problems, so I started a new post). I also found another post that stated:

    {
    For example, if you add a member like:

    Local/1234@agents/n

    The button file has to have a button with extension=1234 and context=agents. That way fop2 will be able to rename the button to the memberinterface name set on your dialplan (if you use the member interface parameter).
    }

    However, I tried this as well. The ending result is a static button that shows the agent name all of the time rather than only while the agent is logged in.

    Some additional points that come to mind, not sure if they will help here or not, but:

    1. my dynamic members are not in the asterisk configuration anywhere.
    2. members will sign into their queues from different sip phones from time to time.
    3. various members will sign into the same sip phone each day as the shifts change. i.e. many members share a workstation from shift to shift.

    Sorry for all of the posts, but I really want to make this work, and I'm just trying to share anything I can to help. I already told the boss it would work, since it did on asterisk 1.4 and fop1 .30. now my reputation is on the line... :-(

    Thanks!
    Greg

  15. admin

    8 Mar 2011 Administrator

    I got it! Maybe this will clarify what I'm looking to do. How do I make this button:

    [SIP/100]
    type=extension
    label=Ext 100
    extension=100
    context=default

    Change the label from "Ext 100" to "Rachel" when I do this in the dialplan:

    exten => 400,n,AddQueueMember(800,local/1149@agent,,,Rachel,SIP/100)

    If you want to change SIP/100 button label, the Addqueuemember line in your dialplan should be:

    exten => 400,n,AddQueueMember(800,Local/100@default/n,,,Rachel,SIP/100)

    The extension@context after a Local type channel MUST MATCH the extension and context of the button configuration. And I am also fixing the case and suffix of the local type channel , as you might face issues with the queue_log file if you do not use /n.

    Suppose that you do not use the "default" context for your Queue context in the dialplan, but you use the "agent" context as per the previous example, but you do use the "default" context to reach the regular device/extension. In that case, add the "queuecontext=agent" entry in the button configuration file.

    [SIP/100]
    type=extension
    label=Ext 100
    extension=100
    context=default
    queuecontext=agent

    You said you had turns, someone logs in sip/100 in the morning and another agent in the afternoon. In that case, work it out in your dialplan, so the fancy name "Rachel" or whatever is taken from some variable or astdb entry when the agent authenticates itself, etc.. You should manage that via the dialplan. FOP2 will just pick the name up.

  16. That doesn't make much sense, my phones are extensions sip/100 - sip/199. My queuemembers are local/1100 - local/1149. With you're proposed setup, I would have to setup 49 buttons for each of the 100 phones. 1 phone button that would match each member. If I simply setup 1 button to monitor sip/100 and have the member login as 100 that is at that phone for the current shift, how am I supposed to know when a call is transferred to the member local/100 which member it is, since your method has everyone at phone extension 100 logging in as 100.

    I have dumped a tarball of screen shots to here:

    http://www.gmellc.com/fop-screenshots.tgz

    I setup a button like you stated above. This button works similar to what I'm looking for, but in reverse. I don't want to create a member button for each phone, I would like to create just the phone buttons and have the phone button show me which member is at that phone. Just like fop1 used to do.

    Here's a fop1 button for the CSR phone extention 107. When agent/queue member 1149 logs into the queue from the csr phone 107, the label of this button changes from CSR 107 to Rachel.

    [SIP/107]
    Position=n
    Label="CSR 107"
    Extension=107
    Context=default

    I guess long story short, can you send me an example that would allow me to visually display which queue members are at which phones, knowing that my phones are SIP/100 - SIP/199 and members are local/1100 - local/1149?

    Lastly as you can see in fop2-3, even though the member rachel is logged out of the queue as seen in fop2-4, the member still shows as being logged in. This behaviour started when I installed 2.20.

    Thanks for all your help!
    Greg

  17. admin

    8 Mar 2011 Administrator

    Hi Greg,

    It seems you are asking me to configure your asterisk to replace agentcallbacklogin? I can only help you configuring fop2, and suggest asterisk configs, but not configure your whole dialplan. FOP2 works very well with agentcallbacklogin too. It is not a behavior from FOP that you want in FOP2, but forwardport the asteriskcallbacklogin application that was deprecated since asterisk 1.6.

    I do not understand your Local/XXXX and SIP/YYY relation. That is something that you choose to do in your dialplan logic. But it does not make any sense just by reading your post. How do you relate a device with an extension? I have no idea, you never mentioned how either. And it does not matter. Your dialplan is yours, but do not expect tools to match your criteria or ideas on how things should work.

    If you want the agentcallbacklogin behaviour, then use agentcallbacklogin in asterisk 1.4, or switch to agentlogin that works in a similar fashion also in 1.6 and 1.8. FOP and FOP2 track devices/channel names. They do not track other things. You must define a button to track a real asterisk device/channel, with just one exception: user&device mode for freepbx.

    You can try to mimic freepbx user and device mode, where you setup buttons like:

    [USER/1120]

    and then you create astdb entries mapping users and devices, in the way that FreePBX does, that is quite complicated and that I do not even remember exactly how it is done, there is a userloginlogout.agi , AMPUSER astdb entries to play with, etc. I think that your idea of how things should work is more like this freepbx mode. With this mode you track "extensions/users" and not "devices". To dial an extension you always dial the extension number, but it might rang a different device depending on where the user is logged in. As this behaviour is not something you can do with asterisk applications (like agentcallbacklogin or agentlogin) and it is just a total invention using dialplan, agi, astdb, etc, it is IMPOSSIBLE for any application to accommodate everyone's needs/dialplans/ideas/idiosyncrasy. Freepbx User & Device mode is one way to do it, and fop2 only supports that way. But in that mode you will only see user/extension buttons not directly related to a device.

    The label renaming in fop2 works by matching the extension and context for a Local queue member, or by agentlogin events. It renames ONLY on queue membership.

    I am not going to review all your screenshots, dialplan or ideas as I do not have the time and fop2 will probably not match or will work the way you want. I already mentioned the way fop2 works, and it makes absolute sense. I think you have to try to replicate the userevents and astdb entries for freepbx user&device mode to have something similar, where you see buttons for PEOPLE/EXTENSIONS, and they are not related to a particular device as the relation is done at the time they login into the system.

    best regards,

or Sign Up to reply!